筛法求素数
2015-08-20 11:18
190 查看
用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。如有:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
1不是素数,去掉。剩下的数中2最小,是素数,去掉2的倍数,余下的数是:
3 5 7 9 11 13 15 17 19 21 23 25 27 29
剩下的数中3最小,是素数,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:
2 3 5 7 11 13 17 19 23 29
代码:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
1不是素数,去掉。剩下的数中2最小,是素数,去掉2的倍数,余下的数是:
3 5 7 9 11 13 15 17 19 21 23 25 27 29
剩下的数中3最小,是素数,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:
2 3 5 7 11 13 17 19 23 29
代码:
<span style="font-size:18px;">#include<stdio.h> #define M 1000000 bool s[M]; int main() { int i,j; for(i=2; i<M; i++) s[i]=1; for(i=2; i<1000; i++) if(s[i]) for(j=i*2; j<M; j+=i) s[j]=0; int n,ans; while(scanf("%d",&n) && n) { ans=0; for(i=2; i<=n; i++) if(s[i]) ans++; printf("%d\n",ans); } return 0; } </span>
相关文章推荐
- 操作MySQL数据库相关代码
- 利用Arcengine的GP工具实现缓冲区分析功能
- Javascript(一)-11-(JS语句-其他语句)
- Dialog的各种使用方式
- cocos2d-html5
- C-2 方法重载,比较大小
- 操作MySQL数据库相关代码
- Neutron Metering as a Service
- C#操作Active Directory(AD)详解
- 快学Scala习题解答—第四章 映射和元组
- POJ 2352 树状数组(线段树)
- ASP.NET巧妙利用repeater控件和checkBox控件实现批量操作
- volatile关键字的作用
- HTTP协议 (一) HTTP协议详解
- hdu1002(简单大数加法)
- Javascript(一)-10-(JS语句-循环语句)
- PHP session 存储方式
- Lighttpd交叉编译及使用
- qq第三方登录的调用
- 在Docker中使用ubuntu镜像搭建gitlab