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

 

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