题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4715
思路:先打个素数表,然后判断一下就可以了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 8 bool isprime[7000002]; 9 int num[7000000]; 10 11 int main() 12 { 13 int k=0; 14 memset(isprime,true,sizeof(isprime)); 15 isprime[0]=isprime[1]=false; 16 for(int i=2;i<sqrt(7000000*1.0);i++){ 17 if(isprime[i]){ 18 for(int j=i*i;j<7000000;j+=i){ 19 isprime[j]=false; 20 } 21 } 22 } 23 for(int i=1;i<7000000;i++){ 24 if(isprime[i])num[k++]=i; 25 } 26 int _case,n; 27 scanf("%d",&_case); 28 while(_case--){ 29 scanf("%d",&n); 30 if(n==0){ 31 puts("2 2"); 32 }else if(n<0){ 33 n=-1*n; 34 bool flag=false; 35 for(int i=0;i<k;i++){ 36 if(isprime[num[i]+n]){ 37 flag=true; 38 printf("%d %d ",num[i],num[i]+n); 39 break; 40 } 41 } 42 if(!flag)puts("FAIL"); 43 }else { 44 bool flag=false; 45 for(int i=0;i<k;i++){ 46 if(isprime[num[i]+n]){ 47 flag=true; 48 printf("%d %d ",num[i]+n,num[i]); 49 break; 50 } 51 } 52 if(!flag)puts("FAIL"); 53 } 54 } 55 return 0; 56 }