tle了好几回 要注意剪枝
#include<algorithm> #include<iostream> #include<string.h> #include<cstdio> using namespace std; bool prim[10001]; int main() { int i,j,temp,tempi,tempj,minest,sum; memset(prim,true,sizeof(prim)); for(i=2; i<=10000; ++i) { if(prim[i]) for(j=i+i; j<=10000; j+=i) { prim[j]=false; } } prim[0]=prim[1]=false; // for(i=0;i<100;++i)if(prim[i])cout<<i<<endl; while(cin>>temp) { minest=1e6; sum=temp; temp/=2; for(i=temp; i<temp*2; ++i) { if(!prim[i]) continue; if((i-temp)>minest)continue; for(j=temp; j>1; --j) { //cout<<i<<" "<<j<<endl; if(!prim[j])////////// continue; if((i-j)>minest)//// continue; if((i+j)==sum) { if((i-j)<minest) { minest=i-j; tempi=i; tempj=j; } } } } printf("%d %d\n",tempj,tempi); } return 0; }