2022.10.20 闲话

没啥可写的了啊,放一个水题吧:

ABC254D Together Square

给整数 \(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 好像叫堆内增量式更新?

posted @ 2022-10-20 08:57  Jijidawang  阅读(54)  评论(0编辑  收藏  举报
😅​