高中生活 解题报告

upd 2024.2.21

更改了时间复杂度问题。

题目描述

给出 \(n,m\) ,求:

\[\prod_{i=1}^n\prod_{j=1}^m\text{lcm}(i,j)^{\gcd(i,j)} \]

\(n,m \leqslant 10^6\) 。多测,数据组数 \(T \leqslant 100\)

思路点拨

分解 \(\text{lcm}\) :

\[\prod_{i=1}^n\prod_{j=1}^m(\dfrac{ij}{\gcd(i,j)})^{\gcd(i,j)} \]

可以转化为两个问题:

\[\prod_{i=1}^n\prod_{j=1}^m (ij)^{\gcd(i,j)} \]

\[\prod_{i=1}^n\prod_{j=1}^m\gcd(i,j)^{\gcd(i,j)} \]

分子部分看起来比较简单,并且可以拆分为 \(i,j\) 两个独立的问题,我们拿 \(i\) 举例子:

\[\prod_{i=1}^n\prod_{j=1}^m i^{\gcd(i,j)} \]

\[\prod_{i=1}^ni^{\sum_{j=1}^m\gcd(i,j)} \]

先考虑幂次的式子,这个莫比乌斯反演感觉不那么方便:

\[\sum_{j=1}^m\gcd(i,j)=\sum_{j=1}^m\sum_{d|j,d|i}\varphi(d)=\sum_{d|i}\varphi(d)\lfloor\dfrac{m}{d}\rfloor \]

带回原式

\[\prod_{i=1}^ni^{\sum_{d|i}\varphi(d)\lfloor\dfrac{m}{d}\rfloor} \]

发现 \(\lfloor \dfrac{m}{d}\rfloor\) 阻止了快速运算,转而枚举 \(d\):

\[\prod_{d=1}^n \prod_{d|i} i^{\varphi(d)\lfloor\dfrac{m}{d}\rfloor}=\prod_{d=1}^n (\prod_{d|i} i)^{\varphi(d)\lfloor\dfrac{m}{d}\rfloor} \]

其中关于 \(\prod_{d|i}i=fac(\lfloor \frac{n}{d} \rfloor) \times d^{\lfloor \frac{n}{d} \rfloor}\)

带回原式得到:

\[\prod_{d=1}^n (fac(\lfloor \frac{n}{d} \rfloor) \times d^{\lfloor \frac{n}{d} \rfloor})^{\varphi(d)\lfloor\dfrac{m}{d}\rfloor} \]

这个时候,如果 \(\lfloor \frac{n}{d}\rfloor\)\(\lfloor \frac{m}{d}\rfloor\) 一样就好了,可以使用富比尼定理在 \(O(\sqrt n)\) 级别的时间进行枚举。对于一段连续值域的 \(d\) ,我们需要计算 \(\prod_{d=l}^r d^{\lfloor \frac{n}{d}\rfloor}\) ,因为 \(\lfloor \frac{n}{d}\rfloor\) 是一样的,所以等价于 \((\prod_{d=l}^r d)^{\lfloor \frac{n}{d}\rfloor}\) ,可以使用阶乘和逆元求出 \(O(\log mod)\) 求出。

我们完成了分子的计算,单次花费 \(O(\sqrt n \log mod)\) ,是一个可以接受的时间。

考虑分母部分:

\[\prod_{i=1}^n \prod_{j=1}^m \gcd(i,j)^{\gcd(i,j)} \]

显然可以枚举一个 \(\gcd\)

\[\prod_{d=1}^n (d^d)^{\sum_{i=1}^{n}\sum_{j=1}^m [\gcd(i,j)=d]} \]

考虑幂次的部分:

\[\sum_{i=1}^{n}\sum_{j=1}^m [\gcd(i,j)=d]=\sum_{i=1}^{\lfloor\frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor\frac{m}{d} \rfloor} [\gcd(i,j)=1] \]

记这个式子的值为 \(sum(\lfloor \frac{n}{d}\rfloor,\lfloor \frac{m}{d}\rfloor)\) ,所以:

\[sum(n,m)=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=1] \]

\[\sum_{i=1}^n\sum_{j=1}^m \sum_{d|i,d|j} \mu(d) \]

枚举 \(d\)

\[\sum_{d=1}^n \mu(d) \lfloor \dfrac{n}{d}\rfloor \lfloor \dfrac{m}{d}\rfloor \]

这个可以简单整除分块一下,时间 \(O(\sqrt n)\)

我们带回原式:

\[\prod_{d=1}^n (d^d)^{sum(\lfloor \frac{n}{d}\rfloor,\lfloor \frac{m}{d}\rfloor)} \]

整除分块套整除分块,时间复杂度大约为 \(O(n^{0.0.66})\) 单次,大概吧。

所以时间复杂度可以在 \(O(n \log mod)\) 预处理的情况下做到单次 \(O(n^{0.66}+n^{0.5}\log mod)\) 。应该是一个可以通过的时间。

posted @ 2024-02-20 19:41  Diavolo-Kuang  阅读(14)  评论(0编辑  收藏  举报