Difference Between Primes
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3339 Accepted Submission(s): 953
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
Sample Output
Source
2013 ACM/ICPC Asia Regional Online —— Warmup
Recommend
liuyiding | We have carefully selected several similar problems for you: 5679 5678 5677 5676 5675
ACode:
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1100000
#define maxx 500000
#define ll long
using namespace std;
ll p[maxn];
bool vis[maxn];
int main(){
memset(p,0,sizeof(p));
memset(vis,0,sizeof(vis));
for(ll i=2;i<=maxn;++i){
if(!p[i])p[++p[0]]=i;
for(int j=1;j<=p[0]&&p[j]<maxn/i;++j){
p[p[j]*i]=1;
if(i%p[j]==0)break;
}
}
// cout<<p[3252433];
for(int i=1;i<maxn;++i){vis[p[i]]=true;}
int loop;
scanf("%d",&loop);
while(loop--){
ll a;
cin>>a;
if(a==0)printf("2 2\n");
else if(a<0){
a=-a;
bool flag=true;
for(int i=1;flag&&i<=maxn;++i){
//cout<<a*p[i]<<" "<<vis[a*p[i]]<<'\12';
if(vis[a+p[i]]!=0){
cout<<p[i]<<" "<<a+p[i]<<'\12';
flag=false;
}
}
}
else{
bool flag=true;
for(int i=1;flag&&i<=maxn;++i){
//cout<<a*p[i]<<" "<<vis[a*p[i]]<<'\12';
if(vis[a+p[i]]!=0){
cout<<a+p[i]<<" "<<p[i]<<'\12';
flag=false;
}
}
}
}
return 0;
}