HDU4715

来源:互联网 发布:港珠澳大桥造假 知乎 编辑:程序博客网 时间:2024/06/09 19:39

思路:

1.不存在输出FAIL的情况

2.素数打表 实现判断素数 和 查找第i个素数

3.二分查找素数表,从比x大的下一个素数now开始,判断这now-n是否素数


/*Code By Aquariuslt*//*HDU 4715 Difference Between Primes*/#include<iostream>#include<stdio.h>#include<string>#include<algorithm>#include<string.h>#include<set>#include<vector>#include<queue>#include<stack>#include<limits.h>#include<math.h>#define FOR(i,a,b) for(int i=(a);i<(b);i++)#define FORD(i,a,b) for(int i=(a);i<=(b);i++)#define REP(i,b) FOR(i,0,b)#define CLR(a) memset(a,0,sizeof(a))using namespace std;#define maxn 100010int pi;int isprime[maxn],prime[maxn];void init(){    CLR(isprime);    isprime[0]=1;    isprime[1]=1;    for(int i=2;i<maxn;i++){        for(int j=2;i*j<maxn;j++){            isprime[i*j]=1;        }    }    pi=0;    REP(i,maxn){        if(isprime[i]==0)prime[pi++]=i;    }}int main(){    init();    int t;    scanf("%d",&t);    REP(ti,t){        int n;        scanf("%d",&n);        int *s=upper_bound(prime,prime+pi,n);        while(1){            int now=*s;            if(isprime[now-n]==0){                printf("%d %d\n",now,now-n);                break;            }            s++;        }    }    return 0;}