Eratosthenes筛法和Euler筛法
2015-02-24 20:28
453 查看
Eratosthenes筛法:
先用第一个质数2去筛,2留下,把2的倍数剔除掉;再用下一个素数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个素数5筛,把5留下,把5的倍数剔除掉;不断重复下去……最后剩下来的都是质数。//判断前N个质数 bool IsPrime ; int prime[N/2],tot = 0; memset(IsPrime,true,sizeof(IsPrime)); for (int i = 2;i <= N;i++) if (IsPrime[i]){ prime[tot++] = i; for (int j = i*2;j <= N;j += i) IsPrime[j] = false; }
时间复杂度:O(NloglogN)
Euler筛法
bool IsPrime ; int prime[N/2],tot = 0; memset(IsPrime,true,sizeof(IsPrime)); for (int i = 2;i <= N;i++){ if (IsPrime[i]) prime[tot++] = i; for (int j = 0;j < tot;j++){ if (i*prime[j] > N)//超过最大范围,跳出 break; IsPrime[i*prime[j]] = false;//将倍数筛除 if (i%prime[j] == 0)//保证只筛到以prime[j]为最小质因数的数 break; } }
时间复杂度:O(N)
文章来源
相关文章推荐
- 找质数算法(Sieve of Eratosthenes筛法)
- Eratosthenes筛法求1——100000之间所有的素数(32位汇编语言)
- Eratosthenes筛法,求素数
- 两种 eratosthenes 筛法的时间比较,第二种快很多会比较好用
- Eratosthenes(埃拉托色尼)筛法
- 找质数算法(Sieve of Eratosthenes筛法)
- 埃拉托色尼(Eratosthenes)筛法
- Eratosthenes筛法求素数
- Eratosthenes筛法--Haskell实现
- Eratosthenes筛法求1-100之间的素数
- 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )
- POJ 2262 Goldbach's Conjecture(Eratosthenes筛法)
- Eratosthenes筛法
- Eratosthenes筛法
- 找质数算法(Sieve of Eratosthenes筛法)
- Eratosthenes筛法(素数筛)
- 找质数算法(Sieve of Eratosthenes筛法)
- 数论初步——Eratosthenes筛法
- 用 Eratosthenes筛法构造1-n的素数表.
- Eratosthenes筛法生成素数表