素数筛选法
2016-09-11 21:28
225 查看
今天发现了一个更快的素筛,比以前会的素筛速度快了整整一倍,虽然大部分题目不会对时间要求那么严格,但是会一个更快的算法还是很棒的。
以前用的素筛:
更快的素筛:
以前用的素筛:
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int maxn=(1<<24)+1; bool isprime[maxn+5]; int prime[maxn+5],cnt=0; void get() { for(int i=2;i<=maxn;i++) { if(!isprime[i]) { prime[cnt++]=i; for(int j=i+i;j<=maxn;j+=i) isprime[j]=1; } } } int main() { get(); cout<<cnt<<endl; printf("%d %d %d\n",prime[0],prime[1],prime[2]); return 0; }
更快的素筛:
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int maxn=(1<<24)+1; bool isprime[maxn+5]; int prime[maxn+5],cnt=0; void get() { for(int i=2;i<=maxn;i++) { if(!isprime[i]) prime[cnt++]=i; for(int j=0;j<cnt&&i*prime[j]<=maxn;j++) { isprime[i*prime[j]]=1; if(i%prime[j]==0) break; //注意这两句话的顺序 } } } int main() { get(); cout<<cnt<<endl; printf("%d %d %d\n",prime[0],prime[1],prime[2]); return 0; }
相关文章推荐
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 算法与数据结构-筛选法求素数
- 筛选法求素数
- ACM-素数筛选
- poj2262 筛选法求素数
- 用抛物线筛选素数
- UVa 10539 - Almost Prime Numbers(筛选求素数)
- 素数筛选法
- 快速筛选法求素数表
- HDU 1164 Eddy's research I【素数筛选法】
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
- JavaScript使用filter方法实现100以内素数的快速筛选
- hdu2710 筛选法求素数
- POJ 2689 Prime Distance(大区间素数筛选)
- 线性筛选素数模板
- 【算法】筛选法统计素数--埃拉托色尼筛
- 筛选法求100以内的素数
- 素数筛选法
- NUC1019 数素数【素数筛选法】
- 筛选素数模板