【JZOJ 5464】 乘积

Description

选择不超过K个N以内的正整数乘起来,使得乘积是一个无平方因子数,有多少种取法?(每个数只能取一次)
无平方因子数x满足 μ(x)!=0
对于70%的数据:N≤30;
对于100%的数据:1≤T≤5;1≤K≤N≤500。

70%

这档很简单,直接用 f[i][j][s] 表示选到第 i 个数,共选了j个,质因子出现二进制状态为 s 的方案数

100%

考虑对70分的dp进行优化
可以发现,对于较大的质因子,它在一个数中出现的次数很少
具体而言,当p>n0.5时, p <script type="math/tex" id="MathJax-Element-221">p</script>在n范围内的数中至多出现一次
如果我们将每个数按最大的质因子分组,那么每个组里面至多选一个数
这样分组来dp,就可以把大于根号n的那些二进制状态省掉了
注意,直接这样做可能会比较慢
注意i<=306(500以内无平方因子数个数),j<=96(500以内不同质数个数)
这样复杂度就很有保障了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值