题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数。
题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数。代码附上。。。
#include<cstdio>
#include<cstring>
#include<cmath>
const int MAX = ;
bool prim[MAX];
void dabiao() { //先打素数表
memset(prim,,sizeof(prim));
for(int i = ;i<=MAX;i+=)
prim[i] = ;
int d = sqrt(MAX);
for(int i = ;i<d;++i) {
if(prim[i])
continue;
for(int j = i*i;j<MAX;j+=i)
prim[j] = ;
}
}
int main( ) {
int n;
dabiao();
while(scanf("%d",&n)!=EOF) {
int loc,MIN = MAX;
for(int i = ;i<=n/;++i)
if(!prim[i]&&!prim[n-i]&&(n-*i)<MIN)
loc = i;
printf("%d %d\n",loc,n-loc);
}
return ;
}