HDU 4715 Difference Between Primes

来源:互联网 发布:网络作家富豪榜 编辑:程序博客网 时间:2024/05/22 10:26
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 513 323 3

模拟就能做,先保存后查询。

#include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std;map<int,int>a;bool isprime(int num){    if (num == 2 || num == 3)    {        return true;    }    if (num % 6 != 1 && num % 6 != 5)    {        return false;    }    for (int i = 5; i*i <= num; i += 6)    {        if (num % i == 0 || num % (i+2) == 0)        {            return false;        }    }    return true;}int main(){    for(int i=2; i<=3110011; i++)    {        if(isprime(i))            a[i]++;    }    int t,x;    scanf("%d",&t);    while(t--)    {        scanf("%d",&x);        map<int,int>::iterator ai;        int flag=0;        if(x>0)        {            for(ai=a.begin(); ai!=a.end(); ai++)            {                if(isprime(ai->first+x))                {                    printf("%d %d\n",ai->first+x,ai->first);                    flag=1;                    break;                }            }            if(!flag)            {                printf("FAIL\n");            }        }        else        {            for(ai=a.begin(); ai!=a.end(); ai++)            {                if(isprime(ai->first-x))                {                    printf("%d %d\n",ai->first,ai->first-x);                    flag=1;                    break;                }            }            if(!flag)            {                printf("FAIL\n");            }        }    }    return 0;}





0 0