素数10000的筛选c语言,关于素数的快速查找——素数筛选法

利用素数筛选法进行素数的快速查找。

原理很简单,素数一定是奇数,素数的倍数一定不是素数。

思路如下:

预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行标记,奇数存为1,偶数存为0,最终实现结果为素数的prime值为1,因此将prime[2]赋值为1(2是素数)。之后利用for循环,对N以内的奇数进行遍历(注意for循环的条件控制),for里用if判断是否为素数(奇数),若是,执行内部嵌套的for循环判断该奇数是否为素数,若是则标记为1,若不是则prime置为0,之后再用if判断是否为素数,若是,则利用循环将该素数的倍数,都标记为0,意在体现,素数的倍数一定不是素数,注意for循环内部的条件:for(j=2*i;j

代码如下,利用c语言实现:

#include

#include

#define N 10000

int 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

{

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

prime[j]=0;//i的倍数存为0

}//执行完后如果i是素数则prime[i]为1

}

}

for(i=2;i

{

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

}

getch();

return 0;

}

这一算法理解之后较为简单,主要难点在于for循环的应用,条件的判断,逻辑必须要清晰!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值