专栏文章

P4902 乘积 题解

P4902题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipyjehw
此快照首次捕获于
2025/12/03 20:02
3 个月前
此快照最后确认于
2025/12/03 20:02
3 个月前
查看原文

思路

发现最外层的累乘可以通过前缀积直接求出来,因此只需要求:
j=1i(ij)ij\prod_{j=1}^i (\frac{i}{j})^{\lfloor \frac{i}{j} \rfloor}
发现分子 ii 对答案影响不大,考虑将他们分开,得:
j=1iiij(j=1ijij)1\prod_{j=1}^i i^{\lfloor \frac{i}{j} \rfloor}(\prod_{j=1}^i j^{\lfloor \frac{i}{j} \rfloor})^{-1}
即:
ij=1iij(j=1ijij)1i^{\sum_{j=1}^i\lfloor \frac{i}{j} \rfloor}(\prod_{j=1}^i j^{\lfloor \frac{i}{j} \rfloor})^{-1}
考虑函数 f(x)=j=1xxjf(x)=\sum_{j=1}^x\lfloor \frac{x}{j} \rfloor,发现 f(x)=f(x1)+dx1f(x)=f(x-1)+\sum_{d|x}1,而一个数的因数个数可以在 O(nlogn)O(n\log n) 的复杂度内求出,因此前半部分的复杂度即为 O(nlogn)O(n\log n)
现在的目标就是求出:
j=1ijij\prod_{j=1}^i j^{\lfloor \frac{i}{j} \rfloor}
不妨假设函数 g(x)=j=1xjxjg(x)=\prod_{j=1}^x j^{\lfloor \frac{x}{j} \rfloor},发现 g(x)=g(x1)×dxdg(x)=g(x-1)\times\prod_{d|x}d,将 dxd\prod_{d|x}d 前后两两配对,发现若 xx 为完全平方数,则 dxd=xdxd<x1x\prod_{d|x}d=x^{\sum_{d|x \land d < \sqrt x}1} \sqrt x,否则有 dxd=xdxd<x1\prod_{d|x}d=x^{\sum_{d|x \land d < \sqrt x}1},因此也可以在 O(nlogn)O(n\log n) 时间内求出。
最后将上面的所有东西相乘,做前缀积即可。

评论

1 条评论,欢迎与作者交流。

正在加载评论...