普通素数筛
寻找素数对 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\n",ans1,ans2); } return 0;} |

浙公网安备 33010602011771号