越是接近它的话就从他的中间往两边找,这样就可以找到了,一个一个去测,这里数据有一个比较难的地方就是没有给到确定的数据范围,所以每次写的时候数组都是开到一万以上的
#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; }