该题比较简单。
给出一个偶数,要求找到两个素数,其和为该偶数,并且两个素数相差尽量小。
思路:在judge()函数中打出一张10000以内的素数表。prime[i]=true表示数i为素数,反之不是。然后再在main()中从接近输入n/2的数开始渐进寻找!
AC代码:51MS
#include<iostream> using namespace std; const int MAXNUM=10000; bool prime[MAXNUM+1]; void judge() //找出1至10000所有素数,是就用ture标志,反之用false标志 { memset(prime,false,sizeof(prime)); int tmp; bool flag; for(int i=2;i<=MAXNUM;i++) { tmp=(i+1)/2; //一个数不会有大于其一半的因子,除去它本身 flag=true; for(int j=2;j<=tmp;j++) { if(i%j==0) { flag=false; break; } } if(flag) prime[i]=true; } } int main() { judge(); int n,tmp; while(cin>>n) { tmp=n/2; //从最接近出开始找 while(tmp>=2) { if(prime[tmp] && prime[n-tmp]) { cout<<tmp<<" "<<n-tmp<<endl; break; } tmp--; //递减 } } return 0; }