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