本文目錄一覽:
- 1、C語言 求出 2 到 m 之間 ( 含 m,m
- 2、用C語言把2-100之內的素數放到數組裡,並且輸出來。
- 3、C語言:找出100以內的所有素數,存放在一維數組中,並將所找到的素數按每行10個數的形式輸出。
- 4、c語言 編寫一個函數 搜索出一組數中的素數 並將它保存到另一個數組中
- 5、C語言求素數數組
- 6、C語言編程,從3開始,求出最小的10個素數,並保存到數組中
C語言 求出 2 到 m 之間 ( 含 m,m
#include stdio.h
#include stdlib.h
int main()
{
int m,i,j,k=0,flag=1;
scanf(“%d”,m);
int a[1000];
for(i=2; i=m; i++) //其實2不需要特殊處理的,就從2開始
{
flag = 1;//每輪的flag都需要重新賦值的
for(j=2; j*j=i; j++)
{
if(i%j==0)
{
flag=0;//非質數,直接退出
break;
}
}
if(flag)
{
//輸出質數
a[k]=i;
printf(“%4d”,a[k]);
k=k+1;
}
}
printf(“\n%d\n”,k);
return 0;
}
printf(” 2″);
就不要放到循環里了,否則會循環輸出的,不符合你的最終要求!
用C語言把2-100之內的素數放到數組裡,並且輸出來。
#include stdio.h
#include stdlib.h
#include math.h
#define n 100
int main()
{
int a[n+1]={0};
int i,j;
for(i=2;i=sqrt(n);i++){
if(a[i]==0){
for(j=2*i;j=n;j+=i){
a[j]=1;
}
}
}
for(i=2;i=n;i++){
if(a[i]==0)
printf(“%d “,i);
}
return 0;
}
輸出100以內的素數,思路:
假如自然數N不是素數,則除1和其本身之外,必然至少存在兩個數A和B,使得A*B=N,則A和B中必有一個大於或者等於sqrt(N),另一個小於或者等於sqrt(N)。下面是粗略證明如果N是合數,則必有一個小於或者等於根號N的素因子.因為任何合數都可表示為兩個或者更多個素數之積。
假如N是合數且其素因子都大於根號N,那麼將產生矛盾:根號N*根號NN。所以合數必有(至少)一個不大於根號N的素因子。
n的不大於根號的因子=sqrt(n);n-1的不大於根號的因子=sqrt(n-1),顯然sqrt(n-1)sqrt(n);所以2~n內的自然數的因子範圍是2~sqrt(n);換句話說2~sqrt(n)的倍數覆蓋了了2~n範圍內的合數。
擴展資料:
數組使用規則:
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,數據庫是從1開始。
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
參考資料:
百度百科-數組
C語言:找出100以內的所有素數,存放在一維數組中,並將所找到的素數按每行10個數的形式輸出。
素數,於是100以內的素數應該少於50個,我們就以a[50]來存放這些素數吧.還有1不是素數。
main()
{
int a[50];
int i=5,j=3,m=1;
a[0]=2;a[1]=3;
for(i=5;i100;i=i+2)
loop1: for(j=3;ji;j++)
loop2:
if(i%j==0)
else
{if(j==i-1)
a[++m]=i;
else
}
/*來驗證一下是否正確*/
printf(“%d\n”,m);/*看看有多少個素數*/
for(i=0;i=m;i++)
printf(“%d\t”,a[i]);
}
c語言 編寫一個函數 搜索出一組數中的素數 並將它保存到另一個數組中
//這個給你參考
#includestdio.h
#includestdlib.h
#includemath.h
#includeassert.h
#includememory.h
bool is_prime(unsigned int n)
{
if(n2)
{
return false;
}
unsigned int ncnt=(unsigned int)sqrt(n*1.0);
for(unsigned int i=2;i=ncnt;i++)
{
if(n%i==0)
return false;
}
return true;}
unsigned int search_prime(int* src,int* res,int n)
{
// assert(src!=NULLres!=NULL); //
memset(res,0,sizeof(int)*n);
unsigned int ncnt=0;
for(int i=0;in;i++)
{
if(is_prime(*src))
{
*res++=*src;
++ncnt;
}
src++;
}
return ncnt;
}
int main()
{
int test[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int res[20]={0};
int ncnt=search_prime(test,res,20);
printf(“%d\n”,ncnt);
for(int i=0;incnt;i++)
{
printf(“%d “,res[i]);
}
printf(“\n”);
return 0;}
C語言求素數數組
#include stdlib.h
#include stdio.h
void readwriteDat();
void num(int m, int k, int *xx)
{
int n=0,i,b;
while(m++)/*死循環*/
{
for(i=2;im;i++)
{
if(!(m%i))
{b=0;break;}
else b=1;
}
if(b) xx[n++]=m;/*if(n==k-1) break;
}
}
int main()
{
int m, n, xx[1000];
printf(“\nPlease enter two integers:”);
scanf(“%d%d”, m, n);
num(m, n, xx);
for (m=0; mn; m++)
printf(“%d “, xx[m]);
printf(“\n”);
readwriteDat();
system(“pause”);
return 0;
}
void readwriteDat()
{
int m, n, xx[1000], i;
FILE *rf, *wf;
rf = fopen(“in.dat”, “r”);
wf = fopen(“out.dat”, “w”);
for (i=0; i10; i++)
{
fscanf(rf, “%d %d”, m, n);
num(m, n, xx);
for (m=0; mn; m++)
fprintf(wf, “%d “, xx[m]);
fprintf(wf, “\n”);
}
fclose(rf);
fclose(wf);
}
求一個大於m且僅靠m的k個素數存入數組xx傳回,不知哪裡出錯,除了num函數,其他都是題目給的
C語言編程,從3開始,求出最小的10個素數,並保存到數組中
代碼如下:
#includestdio.h
int main() {
int num[10] = { 2 }, idx = 1;
for (int i = 3; idx != 10; i++) {
int flag = 1;
for (int j = 0; j*j = i j idx; j++) {
if (i%num[j] == 0) {
flag = 0;
break;
}
}
if (flag) num[idx++] = i;
}
for (int i = 0; i 10; i++)
printf(“%d “, num[i]);
printf(“\n”);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239431.html