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

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)

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 x at the next n lines. The absolute value of x is not greater than 10^6.
 
Output
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'.
 
Sample Input
3
6
10
20
 
Sample Output
11 5
13 3
23 3
 
Source

分析:

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

AC代码:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <string.h>
 5 #include <string>
 6 #include <math.h>
 7 #include <stdlib.h>
 8 #include <queue>
 9 #include <stack>
10 #include <set>
11 #include <map>
12 #include <list>
13 #include <iomanip>
14 #include <vector>
15 #pragma comment(linker, "/STACK:1024000000,1024000000")
16 #pragma warning(disable:4786)
17 
18 using namespace std;
19 
20 const int INF = 0x3f3f3f3f;
21 const int MAX = 1000000 + 10;
22 const double eps = 1e-8;
23 const double PI = acos(-1.0);
24 
25 int a[MAX];
26 
27 int main()
28 {
29     int i , j ;
30     memset(a , 0 , sizeof(a));
31     a[1] = 1; a[0] = 1;
32     for(i = 2;i <= sqrt(MAX);i++)
33     {
34         if(a[i] == 0)
35             for(j = i * i;j <= MAX;j += i)
36                 a[j] = 1;
37     }
38     int n,m;
39     scanf("%d",&n);
40     while(n--)
41     {
42         scanf("%d",&m);
43         int t = abs(m);
44         for(i = t;i < MAX;i++)
45             if(!a[i] && !a[i - t])
46             {
47                 if(m > 0)
48                 {
49                     printf("%d %d
",i,i - t);
50                     break;
51                 }
52                 else
53                 {
54                     printf("%d %d
",i - t,i);
55                     break;
56                 }
57             }
58         if(i == MAX)
59             printf("FAIL
");
60     }
61     return 0;
62 }
View Code
原文地址:https://www.cnblogs.com/jeff-wgc/p/4467082.html