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;
}
posted @ 2025-05-25 22:04  屈臣  阅读(20)  评论(0)    收藏  举报