首页 > 技术文章 > Taxes-cf 哥德巴赫猜想

CNLayton 2020-03-19 18:03 原文

传送门:https://codeforces.ml/problemset/problem/735/D

题意:

  当你的收入是x时,你要交x最大的因子(除了x)的数额的税,现在你有一个数字n,试图把n分成几部分收入,每一部分都要交税,试图让总税收最小。

科普:

  哥德巴赫猜想——任一大于2的偶数都可写成两个素数之和,任一大于5的奇数都可写成三个质数之和。(未证明,但在已知的数字是满足的例如1e18以内)

  弱哥德巴赫猜想——任何一个大于7的奇数都能被表示成三个奇质数的和。(已证明)

  把命题——任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"

思路:

  当收入x为质数的时候税金最少,为1,所以我们直接看x是不是质数,是就是1。

  当x不是质数时,看奇偶性,如果是偶数根据哥德巴赫猜想可以分成两个素数答案为2。

  如果是奇数的话,根据歌德巴赫猜想可以分成三个质数,此时还有一种特殊情况,就是n-2是质数,就可以分解成n-2和2共两个答案为2,不满足答案则为3。

ac代码:

#include<iostream>
using namespace std;
typedef long long ll;
bool check(ll x){
    for(int i=2;i*i<=x;i++){
        if(x%i==0) return 0;
    }
    return 1;
}
ll n;
int main()
{
    cin>>n;
    if(check(n)) return cout<<1,0;
    if(n%2==0) return cout<<2,0;
    else{
        if(check(n-2)) return cout<<2,0;
        else return cout<<3,0;
    }
    return 0;
}

 

推荐阅读