题意:
给n张卡片,每张卡片上面有一个数,卡片的值取决于上面数字符合的条件:
1、这个数字是质数
2、其因子的数量是质数
3、其所有因子的和是质数
4、所有因子的乘积是一个平方数
符合几条,卡片的值就是多少。
给n种卡片,每种卡片上面数字是a,一共有b张。从中取k张,问如何取值最大。
还有一个规则是,要是取的所有k张卡片都不符合其中的某一条,则可加上该条规则对应的一个分数。
需要的知识点:
1、质数打表
2、求一个数的因子
3、二分快速幂
解题思路:
1、首先要把每张卡片对应的值求出来
求出该数字的质因子及其个数,一个个判断条件。
需要注意的是,题目问的是所有因子的数量、和、乘积是否是质数。
我们求的是其质数因子的数量,第一个条件比较简单。
要满足第二个条件,该数字只可能有一个质因子。判断其个数+1是不是质数就可以了。
第三个条件,也必须只含一个素因子p^k.然后求1+p^1+p^2+..+p^k .判断是不是素数。
具体分析、证明,点这个博客里面有。。
2、是否存在都不符合某些条件的情况以加分
这里就直接枚举1<<4种情况(每一位代表该位代表的条件是否符合)
先把所有卡片按已有的得分排序,从得分大的到得分小的符合条件的取
#include
#include
#include
#include
#include
#include
#include
#include
#include