您的位置:

c语言求素数并存到数组,c语言将100以内的素数存放到一个数组中

本文目录一览:

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");

}