该题比较简单。
给出一个偶数,要求找到两个素数,其和为该偶数,并且两个素数相差尽量小。
思路:在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;
}