luoguP5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题
一道毒瘤题目,题目链接:luoguP5518。
题意
题目大意:求 $ \prod\limits_{i=1} ^A\prod\limits_{j=1} ^B\prod\limits_{k=1} ^C\left(\dfrac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right) ^{f(type)} $ 。
其中 $ type\in $ \(\{0,1,2\}\) , $ f(0)=1,f(1)=ijk,f(2)=\gcd(i,j,k) $ 。
题解
让我们先来推一下式子。
\[\begin{aligned} &\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\left(\dfrac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right)^{f(type)}\\ =&\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\left(\dfrac{\dfrac{ij}{\gcd(i,j)}}{\gcd(i,k)}\right)^{f(type)}&\operatorname{lcm}(i,j)=\dfrac{ij}{\gcd(i,j)}\\ =&\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\left(\dfrac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{f(type)}\\ =&\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\dfrac{i^{f(type)}j^{f(type)}}{\gcd(i,j)^{f(type)}\gcd(i,k)^{f(type)}}\\ =&\dfrac{\left(\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^Ci^{f(type)}\right)\times\left(\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^Cj^{f(type)}\right)}{\left(\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C\gcd(i,j)^{f(type)}\right)\times\left(\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C\gcd(i,k)^{f(type)}\right)} \end{aligned} \]实际上只需要知道 $ \prod\limits_{i=1}^ A\prod\limits_{j=1}^ B\prod\limits_{k=1}^ Ci^{f(type)} $ 和 $ \prod\limits_{i=1}^ A\prod\limits_{j=1}^ B\prod\limits_{k=1}^ C\gcd(i,j)^{f(type)} $ 的求法就可以了。
所以我们一共要推 $ 6 $ 个式子。
type=0
\[\begin{aligned} &\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^Ci\\ =&\prod\limits_{i=1}^Ai^{BC}&直接看 i 被乘了多少次 \end{aligned} \]\[\begin{aligned} &\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C\gcd(i,j)\\ =&\prod\limits_{i=1}^A\prod\limits_{j=1}^B\gcd(i,j)^C\\ =&\prod\limits_{p\in prime,m\ge0}\prod\limits_{i=1}^A\prod\limits_{j=1}^Bp^{C[p^m|\gcd(i,j)]}&枚举质数找\gcd,注意有的\gcd有多个相同质数\\ =&\prod\limits_{p\in prime,m\ge0}p^{\left\lfloor\frac{A}{p^m}\right\rfloor\left\lfloor\frac{B}{p^m}\right\rfloor C} \end{aligned} \]第一个式子直接预处理阶乘,然后算 $ BC $ 次方。
第二个式子可以通过预处理筛出 $ p^m $ ,然后快速幂。
如果想要更快可以筛出所有 $ p^m $ 的前缀积,然后数论分块。
type=1
\[\begin{aligned} &\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^Ci^{ijk}\\ =&\prod\limits_{i=1}^Ai^{i\sum\limits_{j=1}^B\kern{4pt}\sum\limits_{k=1}^C\kern{2pt}jk}\\ =&\prod\limits_{i=1}^Ai^{i(\sum\limits_{j=1}^Bj)(\sum\limits_{k=1}^Ck)}\\ =&\prod\limits_{i=1}^Ai^{if(B)f(C)}&f(n)=\dfrac{n(n+1)}{2} \end{aligned} \]\[\begin{aligned} &\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C\gcd(i,j)^{ijk}\\ =&\prod\limits_{i=1}^A\prod\limits_{j=1}^B\gcd(i,j)^{ij\sum\limits_{k=1}^Ck}\\ =&\prod\limits_{i=1}^A\prod\limits_{j=1}^B\gcd(i,j)^{ijf(C)}\\ =&\prod_{p\in prime,m\ge0}\prod\limits_{i=1}^A\prod\limits_{j=1}^Bp^{[p^m|\gcd(i,j)]ijf(C)}&和上面一样的方法\\ =&\prod_{p\in prime,m\ge0}p^{p^{2m}\kern{3pt}f\left(\left\lfloor\frac{A}{p^m}\right\rfloor\right)f\left(\left\lfloor\frac{B}{p^m}\right\rfloor\right) f(C)} \end{aligned} \]第二个式子计算方式和type=0差不多,第一个式子只需要预处理 $ i^i $ 的前缀积即可。
type=2
\[\begin{aligned} &\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^Ci^{\gcd(i,j,k)}\\ =&\prod\limits_{d=1}^D\prod\limits_{i=1}^Ai^{\sum\limits_{j=1}^B\sum\limits_{k=1}^Cd[\gcd(i,j,k=d)]}&令D=\min(A,B,C),然后枚举\gcd\\ =&\prod\limits_{d=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{d}\right\rfloor}i^{\sum\limits_{j=1}^{\left\lfloor\frac{B}{d}\right\rfloor}\sum\limits_{k=1}^{\left\lfloor\frac{C}{d}\right\rfloor}d[\gcd(i,j,k=1)]}\\ =&\prod\limits_{d=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{d}\right\rfloor}(id)^{\sum\limits_{j=1}^{\left\lfloor\frac{B}{d}\right\rfloor}\sum\limits_{k=1}^{\left\lfloor\frac{C}{d}\right\rfloor}d\sum\limits_{t|\gcd(i,j,k)}\mu(t)}&莫比乌斯反演\\ =&\prod\limits_{d=1}^D\prod\limits_{t=1}^{\left\lfloor\frac{D}{d}\right\rfloor}\prod\limits_{i=1}^{\left\lfloor\frac{A}{dt}\right\rfloor}(idt)^{d\mu(t)\left\lfloor\frac{B}{dt}\right\rfloor\left\lfloor\frac{C}{dt}\right\rfloor}&将t提前\\ =&\prod\limits_{T=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{T }\right\rfloor}(iT)^{\left\lfloor\frac{B}{T}\right\rfloor\left\lfloor\frac{C}{T}\right\rfloor\sum\limits_{d|T}d\mu\left(\frac{T}{d}\right)}&枚举T=dt\\ =&\prod\limits_{T=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{T }\right\rfloor}(iT)^{\left\lfloor\frac{B}{T}\right\rfloor\left\lfloor\frac{C}{T}\right\rfloor\varphi(T)}&id*\mu=\varphi\\ =&\left(\prod\limits_{T=1}^D\left(\left\lfloor\frac{A}{T}\right\rfloor!\right)^{\left\lfloor\frac{B}{T}\right\rfloor\left\lfloor\frac{C}{T}\right\rfloor\varphi(T)}\right)\times\left(\prod\limits_{T=1}^DT^{\varphi(T)\left\lfloor\frac{A}{T}\right\rfloor\left\lfloor\frac{B}{T}\right\rfloor\left\lfloor\frac{C}{T}\right\rfloor}\right) \end{aligned} \]\[\begin{aligned} &\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C\gcd(i,j)^{\gcd(i,j,k)}\\ =&\prod\limits_{d=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{d}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{d}\right\rfloor}(\gcd(i,j)d)^{d\sum\limits_{k=1}^C[\gcd(i,j,k)=1]}&枚举\gcd(i,j,k)\\ =&\prod\limits_{d=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{d}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{d}\right\rfloor}(\gcd(i,j)d)^{d\sum\limits_{k=1}^C\sum\limits_{t|\gcd(i,j,k)}\mu(t)}\\ =&\prod\limits_{d=1}^D\prod\limits_{t=1}^{\left\lfloor\frac{D}{d}\right\rfloor}\prod\limits_{i=1}^{\left\lfloor\frac{A}{td}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{td}\right\rfloor}(\gcd(i,j)td)^{d\mu(t)\left\lfloor\frac{C}{td}\right\rfloor}\\ =&\prod\limits_{T=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{T}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{T}\right\rfloor}(\gcd(i,j)T)^{\left\lfloor\frac{C}{T}\right\rfloor\sum\limits_{d|T}d\mu\left(\frac{T}{d}\right)}\\ =&\prod\limits_{T=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{T}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{T}\right\rfloor}(\gcd(i,j)T)^{\left\lfloor\frac{C}{T}\right\rfloor\varphi(T)}&id*\mu=\varphi\\ =&\left(\prod\limits_{T=1}^DT^{\varphi(T)\left\lfloor\frac{A}{T}\right\rfloor\left\lfloor\frac{B}{T}\right\rfloor\left\lfloor\frac{C}{T}\right\rfloor}\right)\times\left(\prod\limits_{T=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{T}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{T}\right\rfloor}\gcd(i,j)^{\varphi(T)\left\lfloor\frac{C}{T}\right\rfloor}\right) \end{aligned} \]然后你就会发现分子的右边的式子和分母的左边的式子约掉了。
于是我们现在只需要求 $ \prod\limits_{T=1}^ D\left(\left\lfloor\frac{A}{T}\right\rfloor!\right)^{\left\lfloor\frac{B}{T}\right\rfloor\left\lfloor\frac{C}{T}\right\rfloor\varphi(T)} $ 和 $ \prod\limits_{T=1}^ D\prod\limits_{i=1}^ {\left\lfloor\frac{A}{T}\right\rfloor}\prod\limits_{j=1}^ {\left\lfloor\frac{B}{T}\right\rfloor}\gcd(i,j)^{\varphi(T)\left\lfloor\frac{C}{T}\right\rfloor} $ 。
第一个式子只需要预处理阶乘、 $ \varphi $ 的前缀和,然后就可以分块。
第二个式子还需要推一推。
\[\begin{aligned} &\prod\limits_{T=1}^D\prod\limits_{i=1}^{\left\lfloor\frac{A}{T}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor\frac{B}{T}\right\rfloor}\gcd(i,j)^{\varphi(T)\left\lfloor\frac{C}{T}\right\rfloor}\\ =&\prod\limits_{T=1}^D\left(\prod\limits_{d=1}^{\left\lfloor\frac{E}{T}\right\rfloor}d^{\sum\limits_{i=1}^{\left\lfloor\frac{A}{Td}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{B}{Td}\right\rfloor}\sum\limits_{t|\gcd(i,j)}\mu(t)}\right)^{\varphi(T)\left\lfloor\frac{C}{T}\right\rfloor}&E=\min(A,B),枚举\gcd\\ =&\prod\limits_{T=1}^D\left(\prod\limits_{d=1}^{\left\lfloor\frac{E}{T}\right\rfloor}\prod\limits_{t=1}^{\left\lfloor\frac{E}{Td}\right\rfloor}d^{\mu(t)\left\lfloor\frac{A}{Ttd}\right\rfloor\left\lfloor\frac{B}{Ttd}\right\rfloor}\right)^{\varphi(T)\left\lfloor\frac{C}{T}\right\rfloor}\\ &\prod\limits_{T=1}^D\left(\prod\limits_{T'=1}^{\left\lfloor\frac{E}{T}\right\rfloor}\left(\prod\limits_{d|T'}d^{\mu\left(\frac{T'}{d}\right)}\right)^{\left\lfloor\frac{A}{TT'}\right\rfloor\left\lfloor\frac{B}{TT'}\right\rfloor}\right)^{\varphi(T)\left\lfloor\frac{C}{T}\right\rfloor} \end{aligned} \]然后你会发现 $ \prod\limits_{T'=1}^ n\left(\prod\limits_{d|T'}d^{\mu\left(\frac{T'}{d}\right)}\right) $ 是可以预处理的。
于是乎,两遍整除分块就可以了。
最终时间复杂度是 $ O(n\log n+Tn^{\frac{3}{4}}\log n) $ 的。
代码:
#include
#include
#include