C语言编程:用筛选法求100之内的素数,

#include <stdio.h>
#include <math.h>
void main()
{ int i,t,m;
for(m=1;m<=100;m=m+2)
{ t=sqrt(m);
for(i=2;i<=t;i++)
if(m%i==0) break;
if(i>t) printf("%d is a prime number .\n",m);
else printf("%d is not a prime number .\n",m);
}
getchar();
}

这是运行结果 ,高手帮我看看哪里出现了错误 ,谢谢大家!

源代码如下:

#include <stdio.h>

#include <math.h>

int main()

{

int a, b, i, flag;

printf("输入两个整数: ");

scanf("%d %d", &a, &b);

printf("%d与%d之间的素数为: ", a, b);

while(a<b)

{

flag=0;

for(i=2; i<=sqrt(a); i++)

{

if(a%i==0)

{

flag=1;

break;

}

}

if(flag==0)

printf("%d ", a); 

a++;

return 0;

}

扩展资料

一个偶数总能表示为两个素数之和的源代码如下:

#include "stdio.h"

#include "math.h"

main()

{

int a,b,c,d;

scanf("%d",&a);

for(b=3;b<=a/2;b+=2)

{

for(c=2;c<=sqrt(b);c++)

if(b%c==0) break;

if(c>sqrt(b))

d=a-b;

else

break;

for(c=2;c<=sqrt(d);c++)

if(d%c==0)

break;

if(c>sqrt(d))

printf("%d=%d+%d\n",a,b,d);

}

}

for(int i=5;i<=sqrt(x);i+=6)

if(x%i==0||x%(i+2)==0) 

{

printf("%d不是素数",x);

return 0;

}

printf("%d是素数",x);

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-29

#include "stdafx.h" 

#define A 100 

#include <stdio.h>

void main()

{

int i,j;

int array[A]; 

for (i=0;i<A;i++)

array[i]=i+1; 

for (i=0;i<A;i++)

if( array[i]!=1 ) 

for(j=i+1;j<A;j++) 

if( array[j]%array[i]==0) 

array[j]=1; 

}

}

j=0; 

for(i=0;i<A;i++) 

{

if(array[i]!=1) 

{

printf("%4d",array[i]); 

j++; 

if (j%5==0) putchar('\n'); 

}

}

}

 

运行结果:

 

你的程序算法实现,不是依据筛算法的原理实现的,筛选法原理如下:

“筛选法”原理:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去...直至留下的数全为素数

#include <stdio.h>#include <math.h>

void main()

  int i,t,m;

 

  for(m=2; m<=100; m++)

  { 

   t=sqrt(m);

 

      for(i=2;i<=t;i++)

          if(m%i==0) break;

      if(i>t)     printf("%d is a prime number .\n",m);

      else      printf("%d is not a prime number .\n",m);

  }

  getchar();

}

 

 

 

第2个回答  推荐于2017-09-19

用筛法求100以内的素数:

#include<stdio.h>

int main()

{

int a[101],i,j;

for(i=2;i<=100;i++)

a[i]=1;

for(i=2;i<=10;i++)

for(j=i+i;j<=100;j+=i)

a[j]=0;

printf("100以内的素数:\n");

for(i=2;i<=100;i++)

if(a[i])printf("%d ",i);

printf("\n");

 getch();

return 0;

}

第3个回答  2013-03-29
楼主你好!
你这样写的,会把1也认为是prime number。根据定义,1不是素数。2才是最小的素数!还把2是素数给漏掉!
for(m=1;m<=100;m=m+2)这里应该为for(m=2;m<=100;m++)
在for()循环之前应该说明m=1时,不是素数!
希望我的回答对你有帮助!本回答被提问者采纳
第4个回答  2013-03-29
你这个是谭浩强C里的习题吧,我直接给我的代码给你,自己比对一下找找错误,
#include<stdio.h>
#include<math.h>
void main(){
int i,j,a[1001];
for(i=1;i<1001;i++)a[i]=i;
a[1]=0;
for(i=2;i<sqrt(1001);i++)
{
for(j=i+1;j<1001;j++)
{
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0) a[j]=0;
}
}
for(i=1,j=0;i<1001;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
j++;
}
if(j==8)
{
printf("\n");
j=0;
}
}
printf("\n");
}

楼下筛法原理讲的差不多了,但有一条没讲,就是筛法只要循环到sqrt(n)就可以了,至于为什么自己可以想一下。
相似回答