1 条题解
-
0
“ 有不多于 个不同的质因数”这条信息比较重要。
两个正整数 若 则 与 互质。若 的质因数分解中不存在相同质因数则 与 互质。
因此,“不超过 个数与 不互质”可以转化为不超过一个数与 有相同质因数。
考虑状态压缩维护这样的质因数状态(有或无)。记该二进制数 的位数有 位,则有 个二进制状态。注意到 和 这两个数在状态中是等价的。所以考虑计算每一种数的个数 。
::::success[怎么算?] 使用乘法原理,对 进行质因数分解,得 ,若二进制第 位为 ,则这个质因数的指数可能是 ,则 ;若二进制第 位为 ,则这个质因数的指数是 。 ::::
接着,考虑如何计算题目中“不超过一个数与 有相同质因数”。
可以用三进制状压表示每一种数还能选的数量, 表示还能选 个, 表示还能选 个, 表示不能选。则该三进制数的位数有 位,则有 个三进制状态。显然不是所有状态都会被枚举到。
用 dfs 转移,枚举将要选的数的种类,再枚举这种数会影响哪些数(即有相同质因数的数的种类)。
注意要用四进制维护,并使用
__int128。::::info[为什么用四进制?] 如果用三进制,则取第 位等操作需模拟,单次时间复杂度是 的,会超时。
使用四进制,可以类似二进制,使用位运算,单次时间复杂度是 的。 ::::
- 1
信息
- ID
- 10911
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者