ゴールドバッハの予想の内容は次のとおりです。
4より大きい偶数は、2つの奇数の素数の合計に分割できます。
たとえば、次のとおりです。
8 = 3 + 5
20 = 3 + 17 = 7 + 13
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23
ここで、タスクは、100万未満のすべての偶数がGothを満足できることを確認することですバッハの予想。
入力形式
入力には複数のデータセットが含まれています。
データの各グループは1行を占め、偶数nを含みます。
読み取りは0で終了します。
出力形式
各データセットの出力は、n = a + bという形式です。ここで、aとbは奇数の素数です。
条件を満たすaとbのグループが複数ある場合、最大のb-aを持つグループが出力されます。
解決策がない場合、Goldbachの推測は間違っています。
データ範囲
6≤n<106
サンプル入力:
8
20
42
0
サンプル出力:
8 = 3 + 5
20 = 3 + 17
42 = 5 + 37
分析:
線形ふるいテンプレート
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+1000;
bool st[N];
int prime[N];
int cnt;
int n;
void init()
{
memset(st,false,sizeof st);
for(int i=2;i<=N;i++)
{
if(!st[i])
{
prime[++cnt]=i;
}
for(int j=1;prime[j]<=N/i&&j<=cnt;j++)
{
st[prime[j]*i]=true;
if(i%prime[j]==0) break;
}
}
}
int main()
{
init();
while(~scanf("%d",&n)&&n!=0)
{
int f=0;
for(int i=2;i<=n/2;i++)
{
if((!st[i]&&i%2)&&(!st[n-i]&&(n-i)%2))
{
f=1;
printf("%d = %d + %d\n",n,i,n-i);
break;
}
}
if(f==0) cout<<"Goldbach's conjecture is wrong."<<endl;
}
}