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