ゴールドバッハ予想----------------------------------------数論(線形ふるい)

ゴールドバッハの予想の内容は次のとおりです。

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;
	}
 } 

公開された元の記事572件 賞賛された14件 ビュー10,000件以上

おすすめ

転載: blog.csdn.net/qq_43690454/article/details/105381235