hdu 4715(打表)

来源:互联网 发布:linux多线程编程 书籍 编辑:程序博客网 时间:2024/06/07 01:23

题目链接: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\n",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\n",num[i]+n,num[i]);49                     break;50                 }51             }52             if(!flag)puts("FAIL");53         }54     }55     return 0;56 }
View Code

 

0 0
原创粉丝点击