【UR #5C】 怎样跑得更快

\(\texttt{Description}\)

给定整数 \(n\)\(c\)\(d\)\(\langle b_i\rangle_{i=1}^n\),质数 \(p\),求解方程组

\[\begin{cases} \displaystyle\sum_{j=1}^n(i,j)^c[i,j]^dx_j&\equiv b_i\pmod p\\ &\vdots \end{cases} \]

\(\texttt{Solution}\)

神仙题。

zzt 的题解:

我们来解方程 \(\sum_{j=1}^nf(\gcd(i,j))g(i)h(j)x_j=b_i\)
求出 \(f\) 的莫比乌斯反演 \(fr\),那么 \(\sum_{j=1}^n\sum_{d|i,d|j}fr(d)h(j)x_j=b_i/g(i)\)
也就是 \(\sum_{d|i}fr(d)\sum_{d|j}h(j)x_j=b_i/g(i)\)
那我们在对 \(b_i/g(i)\) 莫比乌斯反演,除以 \(fr\) 后就可以求出 \(\sum_{d|j}h(j)x_j\)
这个长的和莫比乌斯反演一样?再来一次莫比乌斯反演就可以求出 \(x_j\) 啦!

我们考虑更一般的情况,已知 \(f\)\(g\),满足 \(\forall i:\sum_{j=1}^nf(\gcd(i,j))h(j)=g(i)\),求 \(h\)

\[\begin{align}\sum_{j=1}^nf(\gcd(i,j))h(j)&=g(i)\tag{1}\\\sum_{j=1}^n\sum_{d|i,d|j}(f\ast\mu)(d)h(j)&=g(i)\tag{2}\\\sum_{d|i}(f\ast\mu)(d)\sum_{d|j}h(j)&=g(i)\tag{3}\\(f\ast\mu)(d)\sum_{d|j}h(j)&=(g\ast\mu)(d)\tag{4}\\\sum_{d|j}h(j)&=(\frac{g\ast\mu}{f\ast\mu})(d)\tag{5}\\h&=\frac{g\ast\mu}{f\ast\mu}\ast\mu\tag{6}\end{align} \]

  • \((1)\to(2)\):对于 \(f(\gcd(i,j))\),我们进行如下变换

    \[\begin{align}f(\gcd(i,j))&=\sum_{k|i,k|j}f(k)[\gcd(i,j)=k]&\text{for gcd}\nonumber\\ &=\sum_{k|i,k|j}f(k)\sum_{t|\frac{i}{k},t|\frac{j}{k}}\mu(k)&\text{Möbius inverse}\nonumber\\ &=\sum_{d|i,d|j}\sum_{k|d}f(k)\mu(\frac{d}{k})=\sum_{d|i,d|j}(f\ast\mu)(d)&\text{let }d=kt\nonumber \end{align} \]

  • \((2)\to(3)\):交换 \(\sum\)

  • \((3)\to(4)\):左边是莫比乌斯变换的形式,则两边同时反演;

  • \((4)\to(5)\):移项点积;

  • \((5)\to(6)\):左边是莫比乌斯变换的形式,则两边同时反演。

至此,我们可以 \(O(n\log)\) 的时间求出 \(h\)

回头看题,发现题目可以整理 \((1)\) 式。我们忽略剩余系的影响,有

\[\sum_{j=1}^n(i,j)^c[i,j]^dx_j=b_i\\\sum_{j=1}^n(i,j)^{c-d}(ij)^dx_j=b_i\\\sum_{j=1}^n(i,j)^{c-d}(j^dx_j)=\frac{b_i}{i^d} \]

我们令 \(f(z)=z^{c-d}\)\(h(z)=(z^dx_z)\)\(g(z)=\frac{b_z}{z^d}\),然后套用 \((5)\) 式就可以了。

最后,\((5)\) 式是真的漂亮:

\[h=\frac{g\ast\mu}{f\ast\mu}\ast\mu \]

猜你喜欢

转载自www.cnblogs.com/Ryedii-blog/p/12578729.html