【2048】筛法求素数
来源:互联网 发布:程序员文史综合题目 编辑:程序博客网 时间:2024/05/21 17:11
Time Limit: 1 second
Memory Limit: 2 MB
问题描述由希腊著名数学家埃拉托斯尼斯提出的所谓“筛法”,是一种高效率的求素数的方法。请用集合的方式来实现这一算法,求2~n(n<=200)之间的素数。
Input
一行,一个小于200的整数n。
Output
多行,每行输出10个数字,每个数字采用场宽5。
Sample Input
40
Sample Output
2 3 5 7 11 13 17 19 23 29 31 37(换行)
【题解】
先剔除1,然后最小的数字是2,再把2的倍数剔除,接下来最小的数字是3.再把3的倍数剔除。最小的数字是5,再。。
每次最小的数字就是质数。
【代码】
/**/#include <cstdio>const int maxn = 200;bool bo[maxn + 10];int n;void input_data(){ scanf("%d",&n); for (int i = 1;i <= n;i++) //每个数字都在筛子中 bo[i] = true;}void get_ans(){ int num = 0,j = n-1,i = 2; //j表示筛子中剩余的数 bo[1] = false; while (j != 0) //如果筛子中还有数就继续晒 { printf("%5d",i); num++; if (num == 10) //如果已经输出10个了就换行 { num = 0; printf("\n"); } for (int m = i;m <= n;m++) //剔除i的倍数 if ( (bo[m]) && ((m % i) == 0)) //要注意不要重复筛同一个数。不然会死循环。。 { bo[m] = false; j--; } if (j ==0) break; while (bo[i] == false) i++; //找下一个最小的数。 }}int main(){ input_data(); get_ans(); return 0;}
0 0
- 【2048】筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- 筛法求素数
- Xml的解析
- 使用add2line 找出lib crash的行数和函数
- 数据挖掘中的聚类算法综述
- 你遇到过哪些理工科的实验高手,他们有哪些优秀的思维习惯?
- 利用Morphia框架工具类操作mongodb的实例。
- 【2048】筛法求素数
- 自定义dialog布局展示(关闭按钮突出一块)
- 九度OJ-1185
- QWidget,QMainWindow和QDialog的区别
- 三条线 (Standard IO)
- Linux高速抓包内容分析(1)
- Android多点触摸交互处理
- Android自定义控件玩转字体变色,打造炫酷ViewPager指示器
- 嵌入式生涯