Taxes-cf 哥德巴赫猜想
传送门: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; }
一点一点积累,一点一点蜕变!