P1579哥德巴赫猜想(升級版)【質數】

題目

現在請你編一個程序驗證哥德巴赫猜想。

先給出一個奇數n,要求輸出3個質數,這3個質數之和等於輸入的奇數。

輸入格式

僅有一行,包含一個正奇數n,其中9<n<20000

輸出格式

僅有一行,輸出3個質數,這3個質數之和等於輸入的奇數。相鄰兩個質數之間用一個空格隔開,最後一個質數後面沒有空格。如果表示方法不唯一,請輸出第一個質數最小的方案,如果第一個質數最小的方案不唯一,請輸出第一個質數最小的同時,第二個質數最小的方案。

解析

最簡單的素數篩了。

代碼

#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<cstring>
using namespace std;
const int maxn = 20005;
int prime[maxn];

int f()
{

	fill(prime , prime + maxn , 0);

	prime[1] = 0;
	prime[2] = 0;
	for(int i = 2 ; i <= maxn ; i ++)
	{
		if(prime[i] == 0)
		{
			for(int j = i * i ;j <= maxn ;j += i)
				prime[j] = 1;
		}
	}
	//質數---0 
}
int main()
{
	f();
	int  n;
	cin >> n;
	
	for(int i = 2; i <= maxn ; i ++)
	{
		if( prime[i]) continue;
		for(int j = i ; j <= maxn ; j ++)
		{
			if( prime[j]) continue;
			int q = n - i - j;
			if( q <= 0) continue;
			if( ! prime[q])
			{
				cout << i << " " << j << " " << q << endl;
				return 0;
			}
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章