本文主要是介绍hdu 4610 Cards(暴力+miller-rabin),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:hdu 4610 Cards
解题思路
用素数筛选法先预处理出每个数的因子个数,因子和。因子个数肯定小于1e6,可以根据预处理的素数表直接判断是否为素数,但是因子和可能到达4百多万,所以直接用miller-rabin直接判素数。
判断因子积是否是平方和的部分,考虑因子个数,如果因子个数为奇数(即该数为平方数),则sqrt(i)必须是平方数才行。如果因子个数为偶数,则cnt/2为偶数时该数的因子积为平方数。
最后枚举一下哪些条件要满足,注意这里,因为有的条件附加值为负数。如果只枚举 24 状态,可能会有选取k个数后,同样满足附加为负数的条件。
代码
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
这篇关于hdu 4610 Cards(暴力+miller-rabin)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!