筛选法判断素数
2012-08-21 09:38
204 查看
常规的判断1-n以内的素数的时间复杂度为O(n*sqrt(n)),在n很大的时候时间很长,所以需要别的方法来判断素数。这里介绍筛选法。
1、申请一个数组bool prime[n+1],初始化所有的奇数下标为true,偶数下标为false(2例外)。
2、
3、最后输出数组中为true的那些下标,就是1-n以内的素数了。
当然这个数组可以用位图来表示,节省空间。
对于筛选法,还可以进一步优化。由于偶数几乎全是合数,因此我们数组中只存奇数,不存偶数,则下标0对应3,下标1对应5,下标2对应7...下标i对应3+2*i。则在循环中遍历到下标i是素数,则将下标i*(2*t+1)+3*t(t=1,2,3…)设置为false。
1、申请一个数组bool prime[n+1],初始化所有的奇数下标为true,偶数下标为false(2例外)。
2、
for(int i=3;i<=sqrt(n);i+=2) { if(prime[i]) { for(int j=i+i;j<=n;j+=i) prime[j]=false; } }
3、最后输出数组中为true的那些下标,就是1-n以内的素数了。
当然这个数组可以用位图来表示,节省空间。
对于筛选法,还可以进一步优化。由于偶数几乎全是合数,因此我们数组中只存奇数,不存偶数,则下标0对应3,下标1对应5,下标2对应7...下标i对应3+2*i。则在循环中遍历到下标i是素数,则将下标i*(2*t+1)+3*t(t=1,2,3…)设置为false。
相关文章推荐
- 筛选法(判断一个数是不是素数,将所有数标记,再判断)
- [day 3]判断素数_筛选法_指定范围内2014.7.16
- 经典问题素数篇————————1、判断是n否为素数!
- [ACM] TOJ 1054 Jesse's Code (素数判断优化+全排列)
- 素数问题的判断
- 素数判断----E -Fermat’s Chirstmas Theorem
- 素数打表(常用素数判断题节省时间复杂度)
- 素数判断(Python 版)
- c练习题4:判断一个数是否为素数
- C++——2828: 素数判断
- 质数的判断然后随机的找到一个偶数等于两个素数的和
- 素数判断的两种常用办法
- 王朝 判断素数个数
- 判断素数的方法
- miller_rabin素数判断和pollard_rho的素数因子分解算法
- 【程序6】判断101-200之间有多少个素数,并输出所有素数。
- 如何判断一个数是否为素数
- 6.素数和(素数的判断)
- Java判断素数
- 如何简单判断一个数是否为素数?