CF735D Taxes (数学,质数,筛法,素数判断)
codeforces链接:https://codeforces.com/problemset/problem/735/D
CF735D Taxes
题目描述
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 $ n_{1}+n_{2}+...+n_{k}=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 $ n_{i}>=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.
输入格式
The first line of the input contains a single integer $ n $ ( $ 2<=n<=2·10^{9} $ ) — the total year income of mr. Funt.
输出格式
Print one integer — minimum possible number of burles that mr. Funt has to pay as a tax.
输入输出样例 #1
输入 #1
4
输出 #1
2
输入输出样例 #2
输入 #2
27
输出 #2
3
思路:
哥德巴赫猜想应用:
1.任何大于2的偶数可以被拆成两个素数(规定1为质数的情况下)
2.任何大于5的数可以被拆成3个素数之和
因此这道题输出的答案最多为3
当n本身是质数:输出1
当n是偶数或者n-2是质数:输出2
其他情况:输出3
题解:
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
ll n;
bool is_prime(int x)
{
if(x<2)return 0;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)return 0;
}
return 1;
}
int main()
{
cin>>n;
if(is_prime(n))cout<<1<<endl;
else if(n%2==0)cout<<2<<endl;
else if(n%2==1&&is_prime(n-2))cout<<2<<endl;
else cout<<3<<endl;
return 0;
}

浙公网安备 33010602011771号