您的位置:首页 > Web前端

hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup

2015-04-29 21:16 232 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4715

Difference Between Primes

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
The first line of input is a number nidentified the count of test cases(n<10^5). There is a even number x at the next n lines. The absolute value of x is not greater than 10^6.

[align=left]Output[/align]
For each number x tested, outputs two primes a and b at one line separated with 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'.

[align=left]Sample Input[/align]

3

6

10

20

[align=left]Sample Output[/align]

11 5

13 3

23 3

[align=left]Source[/align]
2013 ACM/ICPC Asia Regional Online —— Warmup

分析:

这道题就是求一个整数用两个素数(大于等于2)的差表示出来,要求两个素数在满足条件的情况下最小。

AC代码:

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <list>
#include <iomanip>
#include <vector>
#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma warning(disable:4786)

using namespace std;

const int INF = 0x3f3f3f3f;
const int MAX = 1000000 + 10;
const double eps = 1e-8;
const double PI = acos(-1.0);

int a[MAX];

int main()
{
int i , j ;
memset(a , 0 , sizeof(a));
a[1] = 1; a[0] = 1;
for(i = 2;i <= sqrt(MAX);i++)
{
if(a[i] == 0)
for(j = i * i;j <= MAX;j += i)
a[j] = 1;
}
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
int t = abs(m);
for(i = t;i < MAX;i++)
if(!a[i] && !a[i - t])
{
if(m > 0)
{
printf("%d %d\n",i,i - t);
break;
}
else
{
printf("%d %d\n",i - t,i);
break;
}
}
if(i == MAX)
printf("FAIL\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: