Difference Between Primes
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4158 Accepted Submission(s):
1194
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
Source
NOIP2017准备之线性筛法
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long LL; 4 const int MAX=1e6+5; 5 int n,cas; 6 int pri[MAX]; 7 bool t[MAX]; 8 inline int read(){ 9 int an=0,x=1;char c=getchar(); 10 while (c<'0' || c>'9') {if (c=='-') x=-1;c=getchar();} 11 while (c>='0' && c<='9') {an=an*10+c-'0';c=getchar();} 12 return an*x; 13 } 14 void Prime(){ 15 int i,j; 16 memset(t,true,sizeof(t)); 17 for (i=2;i<MAX;i++){ 18 if (t[i]) pri[++pri[0]]=i; 19 for (j=1;j<=pri[0] && pri[j]*i<MAX;j++){ 20 t[i*pri[j]]=false; 21 if (i%pri[j]==0) break; 22 } 23 } 24 } 25 int main(){ 26 freopen ("prime.in","r",stdin); 27 freopen ("prime.out","w",stdout); 28 int i,j,x; 29 Prime(); 30 bool fu; 31 cas=read(); 32 while (cas--){ 33 x=read(); 34 fu=false; 35 if (x<0){fu=true;x=-x;} 36 bool flag=false; 37 for (i=1;i<=pri[0];i++){ 38 if (pri[i]+x>=MAX) continue; 39 if (t[pri[i]+x]) break; 40 } 41 if (i==pri[0]+1){puts("FAIL");} 42 else{ 43 if (fu){ 44 printf("%d %d ",pri[i],pri[i]+x); 45 } 46 else{ 47 printf("%d %d ",pri[i]+x,pri[i]); 48 } 49 } 50 } 51 return 0; 52 }