寻找素数对 HDU1262
哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.
做好了这件实事,就能说明这个猜想是成立的.
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.
Input输入中是一些偶整数M(5<M<=10000). 由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.
Output对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数.
Sample Input
20 30 40Sample Output
7 13 13 17 17 23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<stack> using namespace std; void isPrime( int a[]) { for ( int i=0;i<10007;i++) { a[i] = 1; } a[0] = a[1] = 0; for ( int i=2;i<((10007+1)>>1);i++) { if (a[i]) { for ( int j=(i<<1);j<10007;j+=i) a[j] = 0; } } } int main(){ int prime[10007]; isPrime(prime); int a; while ( scanf ( "%d" ,&a)!=EOF) { a = (a>>1); int ans1 = a,ans2 = a; while (1) { if (prime[ans1] && prime[ans2]) break ; ans1--; ans2++; } printf ( "%d %d
" ,ans1,ans2); } return 0; } |