题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数。
题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从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 }