hdu 4715 Difference Between Primes 筛法
Difference Between Primes
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3603 Accepted Submission(s): 1023
Problem Description
All you know Goldbach conjecture.That is to say, Every even integer greater than 2 can be expressed as the sum of two primes. Today, skywind present a new conjecture: every even integer can be expressed as the difference of two primes. To validate this conjecture, you are asked to write a program.
Input
The first line of input is a number nidentified the count of test cases(n<10^5). There is a even number xat the next nlines. The absolute value of xis not greater than 10^6.
Output
For each number xtested, outputstwo primes aand bat one line separatedwith one space where a-b=x. If more than one group can meet it, output the minimum group. If no primes can satisfy it, output 'FAIL'.
Sample Input
3 6 10 20
Sample Output
11 5 13 3 23 3题意:给你一个n,找最小两个素数使他们的差等于n思路:依次枚举大于n的数m,可以用筛法预处理一下,首先看m是不是素数,再看m-n是不是素数,如果是,那么找到了;注意输入可能有负数#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<queue> using namespace std; #define M 80000 bool visit[M]; int main() { int m,n=0; memset(visit,true,sizeof(visit)); visit[0]=visit[1]=0; for(long long i=2; i<M; ++i) { if(visit[i]==true) { for(long long j=i*i; j<M; j+=i) { visit[j]=false; } } } int T,i; while(~scanf("%d",&T)) { while(T--) { scanf("%d",&n); if(n<0) m=-n; else m=n; for(i=m+2; visit[i]==0||visit[i-m]==0; i++) ; if(n>0) printf("%d %d\n",i,i-m); else printf("%d %d\n",i-m,i); } } return 0; }