題目鏈接:http://codeforces.com/problemset/problem/735/D
原來有這樣一個哥德巴赫猜想
如果一個數是偶數,可以分解爲2個質數之和;
1.如果n本身爲質數直接輸出1
2.如果n爲偶數 可以分解爲 兩個質數之和 輸出2
3.如果n爲奇數,可以分解爲一個質數+一個偶數,輸出3(有一個比較特殊情況的偶數2,本身爲質數,所以奇數的時候需要進行判斷n-2是否爲質數,如果是:輸出2)
根據這個思想:
代碼如下:
#include <bits/stdc++.h>
using namespace std;
bool judge(int n){ // 判斷是一個數是否爲質數;
long long i;
for(i = 2; i*i <= n; ++i){
if(n%i == 0) return false;
}
return true;
}
int main()
{
int n;
scanf("%d", &n);
if(judge(n)) printf("1\n");
else if(!(n&1)) printf("2\n");
else {
if(judge(n-2))
printf("2\n");
else
printf("3\n");
}
}