质数最小拆分(哥德巴赫猜想)

如果N==2,答案是1
如果N>3&&N是偶数时,根据猜想可以拆分成两个质数之和,所以答案是2
如果N>3&&N是奇合数时,奇合数=奇数+偶数
如果这个偶数是2&&N-2为素数,答案是2
如果N-2不是素数,我们可以让奇合数=奇数+偶数中的奇数为素数,所以答案是3

模板题 :简单的序列

//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=(int)8e18+100;
const int maxn=1e7+100;
bool vis[maxn];
int pri[maxn],len;
void init()
{
	for(int i=2; i<maxn; i++)
	{
		if(!vis[i])
		{
			pri[++len]=i;
		}
		for(int j=1; j<=len&&pri[j]*i<maxn; j++)
		{
			vis[i*pri[j]]=1;
			if(i%pri[j]==0)break;
		}
	}
}
signed main()
{
	init();
	int tt;
	cin>>tt;
	while(tt--)
	{
		int s;
		cin>>s;
		if(s==0)
		{
			cout<<"1\n";
			cout<<"0 = 0\n";
			continue;
		}
		if(s==1)
		{
			cout<<"1\n";
			cout<<"1 = 1\n";
			continue;
		}
		if(!vis[s])
		{
			cout<<"1\n";
			cout<<s<<" = "<<s<<"\n";
			continue;
		}
		if(s%2==0)
		{
			for(int i=0; i<len&&pri[i]<s; i++)
			{
				if(!vis[s-pri[i]])
				{
					cout<<"2\n";
					cout<<pri[i]<<" + "<<s-pri[i]<<" = "<<s<<"\n";
					break;
				}
			}
			continue;
		}
		if(s%2==1)
		{
			if(!vis[s-2])
			{
				cout<<"2\n";
				cout<<2<<" + "<<s-2<<" = "<<s<<"\n";
			}
			else
			{
				cout<<"3\n";
				s--;
				for(int i=0; i<len&&pri[i]<s; i++)
				{
					if(!vis[s-pri[i]])
					{
						cout<<"1 + "<<pri[i]<<" + "<<s-pri[i]<<" = "<<s+1<<"\n";
						break;
					}
				}
				continue;
			}

		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thusloop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值