题意:找一对最接近的素数(素数对可以相等)其和等于给出的偶数。
解法:prim[10001]数组中不是素数标记为1,从prim[]下标为n/2开始搜.
注意:素数对可以相等。
ac代码:
View Code
#include<iostream> using namespace std; const int m=10000+1; bool prim[m]; int main() { int i,j; memset(prim,0,sizeof(prim)); prim[0]=prim[1]=1; for(i=2;i<=m/2;i++)//预处理,执行后不是素数的被标记为1 { for(j=i*i;j<=m;j+=i) prim[j]=1; } int n; while(cin>>n) { i=n/2; j=i; if(prim[i]==0) { cout<<i<<" "<<j<<endl; continue; } else { i--; while(prim[i]!=0) i--; j++; while(prim[j]!=0) j++; } while(i+j!=n) { if(i+j>n) { i--; while(prim[i]!=0) i--; } else { j++; while(prim[j]!=0) j++; } } cout<<i<<" "<<j<<endl; } return 0; }