越是接近它的话就从他的中间往两边找,这样就可以找到了,一个一个去测,这里数据有一个比较难的地方就是没有给到确定的数据范围,所以每次写的时候数组都是开到一万以上的
#include<stdio.h>
bool prime[10005];
void isprime(){
for(int i=2;i<=10000;i++){
prime[i]=1;
}
for(int i=2;i<=10000;i++){
if(prime[i]==1){
for(int j=2*i;j<=10000;j=j+i){
prime[j]=0;
}
}
}
}
int main(){
int n,mid;
isprime();
while(scanf("%d",&n)!=EOF){
mid=n/2;
for(int i=mid;i>=2;i--){
if(prime[i]==1&&prime[n-i]==1){
printf("%d\n%d\n",i,n-i);
break;
}
}
}
return 0;
} 
京公网安备 11010502036488号