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 2147483647 using 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
【线筛】线性筛选素数
最新推荐文章于 2024-02-19 17:51:32 发布