【线筛】线性筛选素数

来源:互联网 发布:血小板计数算法 编辑:程序博客网 时间:2024/06/07 23:54
hz2016评测《《点击跳转caioj《《点击跳转线性筛选,什么名词,听不同,通俗就是减少后面搜索状态而已嘛。具体还是看注释吧,就是On求素数。
#include<map>#include<queue>#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define Maxprime 15485863#define Maxm 1000000#define Maxn 50#define mes(x,y) memset(x,y,sizeof(x));#define mpy(x,y) memcpy(x,y,sizeof(x))#define INF 2147483647using namespace std;int n,prime[Maxm+1];bool v[Maxprime+1];void get_prime(int maxx){memset(v,true,sizeof(v));prime[0]=0;for(int i=2;i<=maxx;i++){if(v[i]==true){//如果我不是有多个因子的 prime[++prime[0]]=i;//加多一个素数 }for(int j=1;(j<=prime[0])&&(i*prime[j]<=maxx);j++){//吧所有是这个数的倍数的数全部设为false,就是代表我有多个因子,多个因子就不是素数 v[i*prime[j]]=false;if(i%prime[j]==0)break;//后面的还没有求过,所以不可以提前调用,直接break }}}int main(){scanf("%d",&n);get_prime(Maxprime);//下面的很简单 for(int i=1;i<=n;i++){int x;scanf("%d",&x);printf("%d\n",prime[x]);}return 0;}
  

查看原文:http://hz2016.tk/blog/?p=34
原创粉丝点击