P5518
[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题
md 果然是 基 础 练 习 题,推完式子就是良心大模拟,外加劲爽卡常。
做这个题不过就是复健一下,没想到差点就残废了(东方题杀我)。。。
三问的关联不大,分开讲吧。
当 $type=0$ 时。
这个问题实际上和 P3704 是一样的(或者说非常类似的)。
这里我就偷懒不写每一步的具体解释了。
$$
\begin{aligned}
Ans&=\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\dfrac{\operatorname{lcm}(i,j)}{\gcd(i,k)}
\\
&=\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\dfrac{ij}{\gcd(i,j)\gcd(i,k)}
\\
&=(A!)^{BC}(B!)^{AC}\left(\prod_{i=1}^{A}\prod_{j=1}^{B}\dfrac{1}{\gcd(i,j)}\right)^{C}\left(\prod_{i=1}^{A}\prod_{j=1}^{C}\dfrac{1}{\gcd(i,k)}\right)^{B}
\end{aligned}
$$
这个时候我们发现后面的两个因式的结构是相似的,不妨将它们设为一个二元函数的形式:
$$
\begin{aligned}
f(n,m)&=\prod_{i=1}^{n}\prod_{j=1}^{m}\dfrac{1}{\gcd(i,j)}
\\
&=\prod_{d=1}\prod_{i=1}^{n}\prod_{j=1}^{m}\left(\dfrac{1}{d}\right)^{[\gcd(i,j)=d]}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=d]}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}[\gcd(i,j)=1]}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\sum_{k\mid i,k\mid j}\mu(k)}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{\sum_{k=1}\mu(k)\lfloor n/(kd)\rfloor\lfloor m/(kd)\rfloor}
\end{aligned}
$$
设 $T=kd$,则 $k=T/d$,于是我们有:
$$
f(n,m)=\prod_{T=1}\left(\prod_{d\mid T}\left(\dfrac{1}{d}\right)^{\mu(T/d)}\right)^{\lfloor n/T\rfloor\lfloor m/T\rfloor}
$$
与 P3704 类似,我们设:
$$
g(n)=\prod_{d\mid n}\left(\dfrac{1}{d}\right)^{\mu(n/d)}
$$
然后我们可以类似埃氏筛的方法在 $O(n\ln n \log p)$ 的复杂度下求出 $g$。
然后设一个前缀乘的函数:
$$
c(n)=\prod_{i=1}^{n}g(i)
$$
然后我们就可以对 $f(n,m)$ 数论分块求解,单次求 $f(n,m)$ 是 $O(\sqrt{n}\log p)$ 的。
这里范围比较小,不用扩展欧拉定理也无所谓。
最后:
$$
Ans=(A!)^{BC}(B!)^{AC}f(A,B)^{C}f(A,C)^{B}
$$
求得第一小问答案的总复杂度是 $O(n\ln n\log p+T\sqrt{n}\log p)$ 的。
当 $type=1$ 时。
实际上和上面的问题差别不大。
$$
\begin{aligned}
Ans&=\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\left(\dfrac{\operatorname{lcm}(i,j)}{\gcd(i,k)}\right)^{ijk}
\\
&=\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\left(\dfrac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{ijk}
\\
&=\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\left(\dfrac{1}{\gcd(i,j)}\right)^{ijk}\left(\dfrac{1}{\gcd(i,k)}\right)^{ijk}(i)^{ijk}(j)^{ijk}
\end{aligned}
$$
看起来会有一大堆等差数列求和,可以提前设:
$$
f(n)=\sum_{i=1}^{n}i=\dfrac{n(n+1)}{2}
$$
然后我们继续变形原式。
$$
\begin{aligned}
Ans=&\left(\prod_{i=1}^{A}(i)^{i}\right)^{f(B)f(C)}\left(\prod_{j=1}^{B}(j)^{j}\right)^{f(A)f(C)}
\\
&\left(\prod_{i=1}^{A}\prod_{j=1}^{B}\left(\dfrac{1}{\gcd(i,j)}\right)^{ij}\right)^{f(C)}
\\
&\left(\prod_{i=1}^{A}\prod_{k=1}^{C}\left(\dfrac{1}{\gcd(i,k)}\right)^{ik}\right)^{f(B)}
\end{aligned}
$$
前面两个因式显然可以 $O(n\log p)$ 预处理,然后单次 $O(\log p)$。当然需要用扩展欧拉定理缩小指数。
后面两项的结构类似,我们同样设函数解决:
$$
\begin{aligned}
g(n,m)&=\prod_{i=1}^{n}\prod_{j=1}^{m}\left(\dfrac{1}{\gcd(i,j)}\right)^{ij}
\\
&=\prod_{d=1}\prod_{i=1}^{n}\prod_{j=1}^{m}\left(\dfrac{1}{d}\right)^{[\gcd(i,j)=d]ij}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=d]ij}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}[\gcd(i,j)=1]ijd^2}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{d^2\sum_{i=1}^{\lfloor n/d\rfloor}\sum_{j=1}^{\lfloor m/d\rfloor}\sum_{k\mid i,k\mid j}ij\mu(k)}
\\
&=\prod_{d=1}\left(\dfrac{1}{d}\right)^{d^2\sum_{k=1}\mu(k)k^2f(\lfloor n/(kd)\rfloor)f(\lfloor m/(kd)\rfloor)}
\\
&=\prod_{k=1}\prod_{d=1}\left(\dfrac{1}{d}\right)^{d^2\mu(k)k^2f(\lfloor n/(kd)\rfloor)f(\lfloor m/(kd)\rfloor)}
\end{aligned}
$$
设 $T=kd$,则 $k=T/d$,于是我们有:
$$
\begin{aligned}
g(n,m)&=\prod_{T=1}\prod_{d\mid T}\left(\dfrac{1}{d}\right)^{d^2(T/d)^2\mu(T/d)f(\lfloor n/T\rfloor)f(\lfloor m/T\rfloor)}
\\
&=\prod_{T=1}\left(\prod_{d\mid T}\left(\dfrac{1}{d}\right)^{\mu(T/d)T^2}\right)^{f(\lfloor n/T\rfloor)f(\lfloor m/T\rfloor)}
\end{aligned}
$$
中间那一坨东西类似 $type=0$ 时候的 $g$ 函数,同样需要预处理。
然后我们单次求 $g(n,m)$ 是 $O(\sqrt{n}\log p)$ 的。同样需要用扩展欧拉定理降低指数。
最后我们的答案就是:
$$Ans=\left(\prod_{i=1}^{A}(i)^{i}\right)^{f(B)f(C)}\left(\prod_{j=1}^{B}(j)^{j}\right)^{f(A)f(C)}g(A,B)^{f(C)}g(A,C)^{f(B)}$$
最后求得第二小问答案的总复杂度是 $O(n\ln n\log p+T\sqrt{n}\log p)$ 的。
当 $type=2$ 时。
这个是最恶心的小问。
$$
\begin{aligned}
Ans=& \prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\left(\dfrac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{\gcd(i,j,k)}
\\
=& \prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\prod_{d\mid i,d\mid j,d\mid k}\left(\dfrac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{\varphi(d)}
\\
=& \prod_{d=1}\prod_{i=1}^{\lfloor A/d\rfloor}\prod_{j=1}^{\lfloor B/d\rfloor}\prod_{k=1}^{\lfloor C/d\rfloor}\left(\dfrac{ij}{\gcd(i,j)\gcd(i,k)}\right)^{\varphi(d)}
\\
=&\left(\prod_{d=1}\prod_{i=1}^{\lfloor A/d\rfloor}\prod_{j=1}^{\lfloor B/d\rfloor}\prod_{k=1}^{\lfloor C/d\rfloor}\left(i\right)^{\varphi(d)}\right)
\\
& \left(\prod_{d=1}\prod_{i=1}^{\lfloor A/d\rfloor}\prod_{j=1}^{\lfloor B/d\rfloor}\prod_{k=1}^{\lfloor C/d\rfloor}\left(j\right)^{\varphi(d)}\right)
\\
& \left(\prod_{d=1}\prod_{i=1}^{\lfloor A/d\rfloor}\prod_{j=1}^{\lfloor B/d\rfloor}\prod_{k=1}^{\lfloor C/d\rfloor}\left(\dfrac{1}{\gcd(i,j)}\right)^{\varphi(d)}\right)
\\
& \left(\prod_{d=1}\prod_{i=1}^{\lfloor A/d\rfloor}\prod_{j=1}^{\lfloor B/d\rfloor}\prod_{k=1}^{\lfloor C/d\rfloor}\left(\dfrac{1}{\gcd(i,k)}\right)^{\varphi(d)}\right)
\end{aligned}
$$
前面两个因式的结构相同,设函数:
$$
\begin{aligned}
f(a,b,c)=& \prod_{d=1}\prod_{i=1}^{\lfloor a/d\rfloor}\prod_{j=1}^{\lfloor b/d\rfloor}\prod_{k=1}^{\lfloor c/d\rfloor}\left(i\right)^{\varphi(d)}
\\
=& \prod_{d=1}\left(\prod_{i=1}^{\lfloor a/d\rfloor}i\right)^{\varphi(d)\lfloor b/d\rfloor\lfloor c/d\rfloor}
\\
=& \prod_{d=1}\left(\left\lfloor \dfrac{a}{d}\right\rfloor!\right)^{\varphi(d)\lfloor b/d\rfloor\lfloor c/d\rfloor}
\end{aligned}
$$
三维数论分块就完了,时间复杂度 $O(\sqrt{n}\log n)$。
然后看答案的后面两个因式:
$$
\begin{aligned}
g(a,b,c)=& \prod_{d=1}\prod_{i=1}^{\lfloor a/d\rfloor}\prod_{j=1}^{\lfloor b/d\rfloor}\prod_{k=1}^{\lfloor c/d\rfloor}\left(\dfrac{1}{\gcd(i,j)}\right)^{\varphi(d)}
\\
=& \prod_{d=1}\left(\prod_{i=1}^{\lfloor a/d\rfloor}\prod_{j=1}^{\lfloor b/d\rfloor}\left(\dfrac{1}{\gcd(i,j)}\right)\right)^{\lfloor c/d\rfloor\varphi(d)}
\end{aligned}
$$
同样是三维数论分块,把中间的一坨东西搞出来,于是我们设:
$$
\begin{aligned}
h(n,m)=&\prod_{i=1}^{n}\prod_{j=1}^{m}\left(\dfrac{1}{\gcd(i,j)}\right)
\\
=&\prod_{d=1}\prod_{i=1}^{\lfloor n/d\rfloor}\prod_{j=1}^{\lfloor m/d\rfloor}\left(\dfrac{1}{d}\right)^{[\gcd(i,j)=1]}
\\
=& \prod_{d=1}\prod_{i=1}^{\lfloor n/d\rfloor}\prod_{j=1}^{\lfloor m/d\rfloor}\left(\dfrac{1}{d}\right)^{\sum_{k\mid i,k\mid j}\mu(k)}
\\
=& \prod_{d=1}\prod_{k=1}\left(\dfrac{1}{d}\right)^{\mu(k)\lfloor n/(kd)\rfloor\lfloor m/(kd)\rfloor}
\end{aligned}
$$
设 $T=kd$,则 $k=T/d$:
$$
\begin{aligned}
h(n,m)=&\prod_{T=1}\left(\prod_{d|T}\left(\dfrac{1}{d}\right)^{\mu(T/d)}\right)^{\lfloor n/T\rfloor\lfloor m/T\rfloor}
\end{aligned}
$$
中间那个东西我们显然在前两问已经预处理过了,直接拿过来用就完了。后面的指数同样数论分块掉。
然后我们这个是数论分块套数论分块,复杂度分析类似于不加预处理的杜教筛:
$$
\begin{aligned}
T(n)=& O\left(\sum_{i=1}^{\sqrt{n}}\sqrt{i}+\sum_{i=1}^{\sqrt{n}}\sqrt{\left\lfloor\dfrac{n}{i}\right\rfloor}\right)
\\
=& O\left(\int_{1}^{\sqrt{n}}x^{1/2}\,\delta x+\int_{1}^{\sqrt{n}}\sqrt{\dfrac{n}{x}}\,\delta x\right)
\\
=& O\left(\dfrac{2}{3}n^{3/4}-\dfrac{2}{3}+2n^{3/4}-2n^{1/2}\right)
\\
=& O(n^{3/4})
\end{aligned}
$$
于是我们的答案就是:
$$
Ans=f(A,B,C)f(B,A,C)g(A,B,C)g(A,C,B)
$$
四舍五入单次计算答案就是 $O(n^{3/4}\log n)$ 的。
总的复杂度就是 $O(Tn^{3/4}\log n)$。
至此,三小问全部解决,问题以 $O(n\sqrt{n}+n\ln n\log p+Tn^{3/4}\log p)$ 的复杂度解决。
代码真的很难写。。。要预处理的东西和各小问之间的函数实在是太乱了,字母真的已经在乱标了。。。
再加上本题卡常非常劲爽,整整交了有 3 页左右(浪费评测资源实锤)。。。
一个比较劲爆的卡常技巧:把一些已经预处理出的数的逆元提前求出,避免重复快速幂,速度飞升。
然后我用的还有一些用处不大的卡常,比如把 __int128
换成 long long
(但是该强制转换还是要换,不然指数会溢出),先判断后取余,记忆化。。。
代码:
1 |
|