Difference Between Primes
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
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
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define MAXN 5000001
bool temp[MAXN];
int total = 0;
int prime[MAXN];
void is_prime()
{
temp[0] = temp[1] = true;
for (int i = 2; i <= 2400; i++)
{
if (!temp[i])
{
int ans = i * 2;
while (ans < MAXN)
{
temp[ans] = true;
ans += i;
}
}
}
for (int i = 2; i < MAXN; i++)
{
if (!temp[i])
{
prime[total++] = i;
}
}
}
void input()
{
int n, a, j;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a;
bool flag = true;
if (!a)
{
cout << 2 << " " << 2 << endl;
continue;
}
for (j = 0; j < total; j++)
{
if (prime[j] > 10 * abs(a) && abs(a) != 2)
{
flag = false;
break;
}
if (!temp[abs(a) + prime[j]])
{
if (a > 0)
{
cout << abs(a) + prime[j] << ' ' << prime[j] << endl;
}
else
{
cout << prime[j] << ' ' << abs(a) + prime[j] << endl;
}
//cout << a + prime[j] << " " << prime[j] << endl;
break;
}
}
if(!flag)
{
cout << "FAIL" << endl;
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
is_prime();
input();
return 0;
}