题目描述
原题来自:Ulm Local,题面详见:POJ 2262
哥德巴赫猜想:任何大于 444 的偶数都可以拆成两个奇素数之和。 比如:
你的任务是:验证小于 的数满足哥德巴赫猜想。
输入格式
多组数据,每组数据一个 。
读入以 结束。
输出格式
对于每组数据,输出形如
,其中
是奇素数。若有多组满足条件的
,输出
最大的一组。
若无解,输出
样例
样例输入
8
20
42
0
样例输出
8 = 3 + 5
20 = 3 + 17
42 = 5 + 37
数据范围与提示
对于全部数据, 。
线性筛出 以内素数,枚举都能过。不需要判断肯定有解。
#include<cstdio>
const int N=1e6+10;
int n,p,prime[N],iscomp[N];
void primetable()
{
for(int i=2;i<N;i++)
{
if(!iscomp[i])prime[p++]=i;
for(int j=0;j<p&&i*prime[j]<N;j++)
{
iscomp[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
primetable();
while(scanf("%d",&n)&&n)
{
for(int i=1;i<p&&prime[i]+prime[i]<=n;i++)
if(!iscomp[n-prime[i]]){printf("%d = %d + %d\n",n,prime[i],n-prime[i]);break;}
}
return 0;
}
总结
水