n不是素数时 &&拆分时不是素数
n是偶数&&n>2 则答案(n的最大因子)>=2
n是奇数,答案(最大因子)>=3
若拆分成素数
哥德巴赫猜想 :大于2的偶数能拆分成两个质数之和 所以答案最小能取到2
n为奇数时,n-3为偶数(n-3能拆成两个素数之和,3为素数) 所以奇数的答案<=3
奇数能否为两个素数之和? 因为n为奇数所以拆分的两个素数k,n-k一个为奇数一个为偶数 若k为偶数&&k为素数 k=2 判断n-2是否为素数即可
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
typedef long long ll;
using namespace std;
bool check(ll x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
return false;
}
return true;
}
int main()
{
ll n;
cin>>n;
if(n==2||check(n))//n是素数则答案为1
puts("1");
else if(n%2==0)
puts("2");
else
{
if(check(n-2))
puts("2");
else
puts("3");
}
return 0;
}