Codeforces Round #382 (Div. 2) D. Taxes 数论 哥德巴赫猜想

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 }
原文地址:https://www.cnblogs.com/baocong/p/6518989.html