问题解析
f(x)表示整数 x 的除本身之外的最大因数,那么当x为质数时,f(x)=1,所以这一题其实就是让我们用最少的质数相加得到x,质数的个数就是这一题的答案。
- 那么当x为质数时,f(x)直接就等于1了,不用拆分。
- 当x为偶数时,这里就要讲一个非常著名的猜想:哥德巴赫猜想。哥德巴赫猜想是说,对于任意一个大于2的偶数都可以拆分成两个质数之和(虽然只是猜想,没法验证,但是用起来是完全没问题的)。所以当x为偶数时,结果就是2。
- 当x为奇数时,我们要再分情况考虑,如果x-2是一个质数,那么我们把x拆分成x-2和2就可以得到最小的结果,结果是2;如果x-2不是质数,我们就可以把x拆分成3和一个偶数,这样的结果是3.
AC 代码
bool check(int x)
{
for (int i = 2; i <= x / i; i++)
{
if (x % i == 0)return false;
}
return true;
}
void solve()
{
int n;
cin>>n;
if(check(n))
{
cout<<1;
}
else if(n%2==0)cout<<2;
else if(check(n-2))cout<<2;
else cout<<3;
}
牛逼
雪雪orz
牛逼
orz
第3点没想到啊啊啊
orz
牛
%%%%
orz
牛逼
牛逼