Codeforces 735D《Taxes》
三月 23, 2019
1388
这™什么破题
题面
大概就是规定一个数的花费为它的最大真因子(除了本身以外的最大因数,如果这个数是质数,花费为1)
现在给你一个数 ,要求把它拆成几个数相加的形式(也可以不拆),使得拆完后每一个数的花费的和最小
输出这个最小的和
输入输出样例
输入样例#1
1 |
|
输出样例#1
1 |
|
输入样例#2
1 |
|
输出样例#2
1 |
|
解析
别告诉我你脑子里装的都是暴力
我现在来说几个有趣的性质
说完这道题就做完了
- 哥德巴赫猜想(即任意大于2的偶数都可以被拆成两个质数的和)
- 对于任意大于5的非质奇数(即不是质数的奇数),都可以被拆成3和两个质数的和(哥德巴赫猜想的一个推论)
好 现在假设哥德巴赫猜想成立 请读者自行证明第二条
依据这两个性质,我们可以对这道题进行如下的分类讨论
- 当给定的为质数时,花费为1
- 当给定的为偶数时,根据哥德巴赫猜想可以拆成两个质数,花费为2
- 当
给定的数-2
为质数时,这个数可以拆成2和给定的数-2
两个质数,花费为2 - 否则这个数可以拆成3和
给定的数-3
,因为给定的数是奇数,显然给定的数-3
是偶数,可以拆成两个质数,花费为3
代码实现
1 |
|
- 本文作者:Handwer STD
- 本文链接:https://blog.handwer-std.top/2019-03-23/CF735D/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!