普通素数筛

寻找素数对 HDU1262
哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数. 
做好了这件实事,就能说明这个猜想是成立的. 
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的. 
Input输入中是一些偶整数M(5<M<=10000). 
Output对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数. 
Sample Input
20 30 40
Sample 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;
}





posted @ 2017-07-30 15:52  swallowblank  阅读(194)  评论(0编辑  收藏  举报