题目描述:
分析:
首先本题需要运用哥德巴赫猜想,虽然该猜想尚未被证明,但也没有举出反例,因此可以使用。
哥德巴赫猜想:
任一大于2的偶数都可写成两个质数之和
任何一个大于7的奇数都能被表示成三个奇质数的和
(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不是质数,那结果必然大于2.因此利用结论:任何一个大于7的奇数都能被表示成三个奇质数的和,可以得出答案为3.
如何快速求质数,可以参考我的这篇文章:
AC代码
from math import sqrt,floor
def prime(num) :
if num == 2 or num == 3 : return True
if num % 6 != 1 and num % 6 != 5 : return False
for i in range(5,floor(sqrt(num))+1,6) :
if num % i == 0 or num % (i+2) == 0 : return False
return True
n = int(input())
# 分类讨论
if prime(n) : print(1)
elif n % 2 == 0 : print(2)
elif prime(n-2) : print(2)
else : print(3)