Codefroces 384 D.Taxes(哥德巴赫猜想,三素数定理)
2018-02-12 21:58
330 查看
Codefroces 384 D
Mr. Funt now lives in a country with a very specific tax laws. The total income of mr. Funt during this year is equal to n (n ≥ 2) burles and the amount of tax he has to pay is calculated as the maximum divisor of n (not equal to n, of course). For example, if n = 6 then Funt has to pay 3 burles, while for n = 25 he needs to pay 5 and if n = 2 he pays only 1 burle.As mr. Funt is a very opportunistic person he wants to cheat a bit. In particular, he wants to split the initial n in several parts n1 + n2 + … + nk = n (here k is arbitrary, even k = 1 is allowed) and pay the taxes for each part separately. He can’t make some part equal to 1 because it will reveal him. So, the condition ni ≥ 2 should hold for all i from 1 to k.
Ostap Bender wonders, how many money Funt has to pay (i.e. minimal) if he chooses and optimal way to split n in parts.
Input
The first line of the input contains a single integer n (2 ≤ n ≤ 2·109) — the total year income of mr. Funt.
Output
Print one integer — minimum possible number of burles that mr. Funt has to pay as a tax.
Examples
Input
4
Output
2
Input
27
Output
3
题目大意:
将n分解为1个或多个的不为1的数字的和的形式,分解后每个数字的最大因子(除数字本身外)相加,求相加后所得结果的最小值解题思路:
求和的最小值,无疑是将n分解成多个素数和的形式最好用到的两个定理:
- 三素数定理:任何大于2的奇数都可以拆成三个奇素数的和,但如果该奇数可以写成2 + 奇素数,则为两个素数和
- 哥德巴赫猜想:任何大于2的偶数都可以写成两个素数的和
大致过程:
1. 首先判断是否为偶数,如果n是偶数且n等于2时输出1,如果n为偶数但不等于2则输出2(哥德巴赫猜想)
2. 如果n是奇数时,且n为素数,输出1
3. 否则,判断n - 2 是不是素数,如果是输出2,否则输出3(三素数定理)
代码:
#include<cstring> #include<cstdio> #include<algorithm> #include<iostream> using namespace std; typedef long long LL; const int MaxN = 1e5 + 5; bool isprime(LL n) { for(int i = 2; i * i <= n; i++) if(n % i == 0) return 0; return 1; } int main() { LL n; cin >> n; if(n == 2) cout << 1 << endl; else if(n % 2 == 0) cout << 2 << endl; else if(isprime(n)) cout << 1 << endl; else if(isprime(n - 2)) cout << 2 << endl; else cout << 3 << endl; return 0; }
相关文章推荐
- Codeforces Round #382 (Div. 2)-735D. Taxes(哥德巴赫猜想?!)
- code forces 382 D Taxes(数论--哥德巴赫猜想)
- Codeforces 735 D Taxes (哥德巴赫猜想)
- Codeforces Round #382 (Div. 2)D. Taxes(哥德巴赫猜想)
- Codeforces Round #382 (Div. 2) D. Taxes (哥德巴赫猜想)
- Codeforces Round #382 (Div. 2) D. Taxes 数论、哥德巴赫猜想
- codeforces 735 D. Taxes (三素数||哥德巴赫猜想)
- codeforce 382 D. Taxes(哥德巴赫猜想)
- Codeforces Round #382 (Div. 2) D. Taxes 哥德巴赫猜想
- D. Taxes 哥德巴赫猜想
- Codeforces#382(Div. 2) D.Taxes【哥德巴赫猜想】
- codeforces725D————Taxes(哥德巴赫猜想)
- 求用c语言验证哥德巴赫猜想
- 一个选项卡宽度的哥德巴赫猜想
- (百例编程)31.哥德巴赫猜想
- 哥德巴赫猜想
- 哥德巴赫猜想
- 58-验证哥德巴赫猜想
- 哥德巴赫猜想
- *循环-04. 验证“哥德巴赫猜想”