哥德巴赫猜想
题目描述
1742 年 6 月 7 日,哥德巴赫写信给当时的大数学家欧拉,提出了以下的猜想:任何一个大于 9 的奇数都可以表示成 3 个质数之和。欧拉在回信中说,他相信这个猜想是正确的,但他不能证明。从此,这道数学难题引起了几乎所有数学家的注意。哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”。
现在请你编一个程序验证哥德巴赫猜想。
输入描述:
输出描述:
输入示例1
2
15
2009
输出示例1
2 2 11
3 3 2003
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;
bool st[N];
void get_primes(ll n)
{
for(ll i=2;i<=n;i++)
{
if(st[i]) continue;
for(ll j=i*2;j<=n;j+=i)
st[j]=1;
}
}
void find(ll n)
{
for(ll i=2;i<=n;i++)
for(ll j=2;j<=n;j++)
{
if(n-i-j<=1) break;
if(!st[n-i-j]&&!st[i]&&!st[j])
{
cout<<i<<" "<<j<<" "<<n-i-j<<endl;
return;
}
}
cout<<-1<<endl;
return;
}
int main()
{
ll t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
get_primes(n);
find(n);
}
return 0;
}