您的位置:首页 > 其它

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 数论