HDU 1262 寻找素数对 模拟题

题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数。

题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数。代码附上。。。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 const int MAX = 10005;
 5 bool prim[MAX];
 6 void dabiao() {           //先打素数表 
 7     memset(prim,0,sizeof(prim));
 8     for(int i = 4;i<=MAX;i+=2)
 9     prim[i] = 1;
10     int d = sqrt(MAX);
11     for(int i = 2;i<d;++i) {
12         if(prim[i])
13         continue;
14         for(int j = i*i;j<MAX;j+=i)
15         prim[j] = 1;
16     }
17 }
18 int main( ) {
19     int n;
20     dabiao();
21     while(scanf("%d",&n)!=EOF) {
22         int loc,MIN = MAX;
23         for(int i = 2;i<=n/2;++i)
24         if(!prim[i]&&!prim[n-i]&&(n-2*i)<MIN)
25         loc = i;
26         printf("%d %d
",loc,n-loc);
27     }
28     return 0;
29 }
View Code