D. Taxes
链接:
http://codeforces.com/contest/735/problem/D
题解:
两个定理。三素数定理:大于2的奇数都可以拆成三个素数和的形式
哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和。
然后,判断一下,如果n是奇数,n-2是素数,答案为2。
代码:
1 #include <map> 2 #include <set> 3 #include <cmath> 4 #include <queue> 5 #include <stack> 6 #include <cstdio> 7 #include <string> 8 #include <vector> 9 #include <cstring> 10 #include <sstream> 11 #include <iostream> 12 #include <algorithm> 13 #include <functional> 14 using namespace std; 15 #define rep(i,a,n) for (int i=a;i<=n;i++) 16 #define per(i,a,n) for (int i=n;i>=a;i--) 17 #define pb push_back 18 #define mp make_pair 19 #define all(x) (x).begin(),(x).end() 20 #define SZ(x) ((int)(x).size()) 21 typedef vector<int> VI; 22 typedef long long ll; 23 typedef pair<int, int> PII; 24 const ll mod = 1e9 + 7; 25 const int inf = 0x3f3f3f3f; 26 const double eps = 1e-7; 27 // head 28 29 bool prime(int n) { 30 if (n == 2) return true; 31 for (int i = 2; i*i <= n; i++) 32 if (n%i == 0) return false; 33 return true; 34 } 35 36 int main() { 37 int n; 38 cin >> n; 39 if (prime(n)) cout << 1 << endl; 40 else if (n % 2 == 0) cout << 2 << endl; 41 else if (prime(n - 2)) cout << 2 << endl; 42 else cout << 3 << endl; 43 return 0; 44 }