2022.10.20 闲话
没啥可写的了啊,放一个水题吧:
给整数 \(n\),求有多少 \(1\le i,j\le n\) 使得 \(ij\) 是完全平方数 .
令 \(f(i)\) 是 \(i\) 的最大平方因子 .
然后 \(ij\) 是完全平方数 iff \(\dfrac{ij}{f(i)f(j)}\) 是完全平方数 .
然而形如 \(\dfrac i{f(i)}\) 的数是 square-free 的,于是原命题又 iff \(\dfrac i{f(i)}=\dfrac j{f(j)}\) .
于是调和级数算 \(f\),然后开个桶统计答案即可 . 时间复杂度就是 \(\Theta(n\log n)\) 的 .
能不能再给力一点啊?其实真的是可以的,\(\Theta(n)\) 解法 和 \(\Theta(\sqrt n)\) 解法 甚至都是存在的 .
一个问题:查询第 \(n\) 个只有 \(2,3,5,7\) 因子的数 .
我们就可以整一个堆,一开始放进去 \(1\) .
然后每次弹堆顶,将堆顶的数与 \(2,3,5,7\) 中不小于其最大质因子的数的乘积(可能有多个)加入堆 .
等弹了 \(n\) 个以后就得到答案了 .
这个 Trick 好像叫堆内增量式更新?
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16807362.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ