思路:其实这个我楞是没想出来,上网翻了一下题解,原来一个大于2偶数必定能拆成两个素数相加,那么这道题就很简单了,只有几种情况,如果n是2那么答案就是1,如果n是偶数但大于2,那么答案就是2,如果n是奇数且n是素数答案就是1,如果n是奇数但n不是素数n-2是素数的话,答案就是2,如果n是奇数但n不是素数也不是素数的话,答案就是3。下面给代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<string>
#include<functional>
typedef long long LL;
using namespace std;
#define maxn 105
#define ll l,mid,now<<1
#define rr mid+1,r,now<<1|1
#define lson l1,mid,l2,r2,now<<1
#define rson mid+1,r1,l2,r2,now<<1|1
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
const int mod = 1e9 + 7;
int main()
{
LL n;
while (~scanf("%lld", &n))
{
if (n == 2){
printf("1\n");
}
else if (n % 2){
bool jud1 = false, jud2 = false;
for (int i = 2; i <= sqrt(n); i++){
if (!(n%i)){
jud1 = true;
break;
}
}
n -= 2;
for (int i = 2; i <= sqrt(n); i++){
if (!(n%i)){
jud2 = true;
break;
}
}
if (!jud1)
printf("1\n");
else if (jud1&&jud2)
printf("3\n");
else
printf("2\n");
}
else
printf("2\n");
}
}