曾经在另外篇博客里看到有人打算利用素数筛选法进行素数的快速查找,但是那篇博文错误太多,这里进行更正。
即利用筛选法寻找素数,原理很简单,素数一定是奇数,素数的倍数一定不是素数,源代码如下。
#include<stdio.h>#include<math.h>#define N 10000int PRime[N];int main(){int i,j,k;for(i=2;i<=N;i++){if(i&1) prime[i]=1;//奇数存为1 else prime[i]=0;//偶数存为0 }prime[2]=1;//2是素数 for(i=3;i<N;i+=2)//i+=2 i始终为奇数 在奇数中寻找素数 {if(prime[i]) //i为素数则执行 {for(k=2;k<=sqrt(i);k++) if(i%k==0) prime[i]=0;//判断i是否为素数 如果i不是素数则存为0 if(prime[i]) //i为素数时 { for(j=2*i;j<N;j+=i)//i的倍数都不为素数 prime[j]=0;//i的倍数存为0 }//执行完后如果i是素数则prime[i]为1 }}for(i=2;i<N;i++){if(prime[i]) printf("%d ",i);}getch();return 0;}
新闻热点
疑难解答