hdu 4715 Difference Between Primes acm

来源:互联网 发布:手机淘宝账户登录不上 编辑:程序博客网 时间:2024/05/22 06:49

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
361020
 

Sample Output

11 5

13 323 3

 

 

#include <iostream>#include <cstdio>#include <cmath>using namespace std;#define MAXN 5000001bool 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;}


 

原创粉丝点击