筛法与素数
来源:互联网 发布:中国域名价格排行 编辑:程序博客网 时间:2024/06/07 13:01
质数又指素数,是指只能整除1和它本身的数。
筛法求素数原理:求小于25的所有素数
- 1、列出2以后的所有序列:
- 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 2、标出序列中的第一个素数,也就是2,序列变成:
- 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 3、将剩下序列中,划摽2的倍数(用删除线标出),序列变成:
- 2 34567 891011 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 4、如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是素数,否则回到第二步。
- 5、本例中,因为25大于2的平方,我们返回第二步:
- 6、剩下的序列中第一个素数是3,将主序列中3的倍数划出(删除线),主序列变成:
- 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 7、我们得到的素数有:2,3
- 8、25仍然大于3的平方,所以我们还要返回第二步:
- 9、现在序列中第一个素数是5,同样将序列中5的倍数划出,主序列成了:
- 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
- 10、我们得到的素数有:2 3 5 。
- 11、因为25等于5的平方,跳出循环.
结论:去掉划线的数字,2到25之间的素数是:2 3 5 7 11 13 17 19 23。
C++代码实现:/*输入一个正整数,输出小于它的所有素数*/#include<iostream>#include<vector>#include<string.h>using namespace std;int main(void){ int val; int i=0; cin>>val; int *p=new int[val+1]; //筛法 先假设所有均为素数,为素数的标示为-1;此处需注意memset的使用 memset(p,-1,sizeof(int)*(val+1)); //0 1不是素数,2是最小的素数 p[0]=0; p[1]=0; for(i=2;i<=val;i++) { if(val<(i*i)) break; if(p[i]) { //是素数 for(int k=i*2;k<=val;k+=i) { p[k]=0;//删除其倍数,素数的倍数必定不是素数 } } } for(i=0;i<=val;i++) { if(p[i]) cout<<i<<" "; } delete [] p;//注意方括号是必须的 return 0;
测试结果:
参考资料:
百度百科-筛法
0 0
- 筛法与素数
- O(NloglogN)素数筛法与O(N)素数筛法的对比测试
- 素数与素数检测
- 素数的一般筛法与线性筛法
- Java编程算法基础---素数与筛法
- 数论之素数(质因数分解与筛法)
- 又见素数(素数筛法)
- nyoj 26 孪生素数 素数筛法
- HDU 4548 美素数 // 素数筛法
- 素数判断和素数筛法
- 素数筛法-----》大规模的判断素数
- 素数筛(筛选法求素数)
- 素数筛选法(素数筛)
- 素数筛算法与素数打表[数学]
- 森德拉姆素数筛法
- 素数筛法
- 素数筛法
- 筛法素数表
- andorid 清除应用栈分析
- 开源系列1---造个图片选择器
- iOS 发布证书申请
- vc++6.0在win8.1遇到的问题
- java打包成可执行的jar或者exe的详细步骤
- 筛法与素数
- JVM 二
- 等宽字体
- D3学习记录之画柱状图
- JavaScript Promise启示录
- 判断是否是一个邮箱
- 强大的网络通信框架(不实现缓存)--第三方开源--AsyncHttpClient
- 【ArcGis for javascript从零开始】之三 散点聚合
- iOS strong,retain,assign,weak,copy属性实测