【数论】分情况讨论:
(1)如果x是质数,那么x的因数只有1和x自己,答案必然是1。
(2)如果x是偶数,根据哥德巴赫猜想,大于2的偶数都能拆分成两个素数的和,例如4可以拆分为2和2,6可以拆分为3和3,8可以拆分为3和5,所以答案是两个质数答案的和,必然是2。
(3)接下来就是奇合数了,从9开始的,我们可以先将它拆分成两个数,并且尽量让这两个数也是质数,因为他是奇数,所以拆分的结果必然一个是奇数一个是偶数,既是偶数又是质数的只有2,所以我们只需要验证另一个数是不是质数就行,如果是质数,那么答案和(2)相同,都是2。否则的话,这个数可以拆分成3和一个偶数,偶数的答案为2,再加上一个质数3,最终为3。
#include<iostream>
#include<math.h>
using namespace std;
bool isPrime(int x) {
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) return false;
}
return true;
}
int main() {
int n;
cin>>n;
if (n == 2) cout<<1<<endl;
else if (n % 2 == 0) cout<<2<<endl;
else {
if (n == 9) cout<<2<<endl;
else if (isPrime(n)) cout<<1<<endl;
else {
n -= 2;
if (isPrime(n)) cout<<2<<endl;
else cout<<3<<endl;
}
}
}
#include<bits/stdc++.h>
using namespace std;
bool prime(int x) {
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
if (prime(n)) puts("1");
else if (n % 2 == 0 || prime(n - 2)) puts("2");
else puts("3");
}