「学习笔记」单位根反演

单位根反演

\[[n|k]\Leftrightarrow \frac1n\sum_{i=0}^{n-1} \omega^{ik}_ n \]

(千万记得乘 \(\frac{1}n\)

如果 \([n|k]\) 那么都是 \(1\)

反之则用等比数列得到 \(\frac1n \frac{\omega_{n}^{nk}-1}{\omega_{n}^k-1}=0\)

用处是求某个多项式的特定倍数的系数和,也就是:

\[\sum_{i=0}^{\lfloor\frac nk\rfloor} [x^{ik}]f(x)=\frac1k \sum_{j=0}^{k-1}f(\omega_{k}^j) \]

把枚举上界换掉,大力展开之后就行了

应用

bzoj3328 PYXFIB

\[\sum_{i=0}^{\lfloor\frac{n}{k}\rfloor}\binom{n}{ik}F_{ik} \% mod \]

满足 \(mod \equiv 1 \mod k\)\(F_{ik}\) 为斐波那契数列第 \(ik\)

  • 关键结论:\(\sum_{i=0}^{n}\binom ni A^i=(A+I)^n\)\(I\) 是单位矩阵

    其实也就是矩阵意义下的二项式定理,因为矩阵乘法和加法可以合并进行

那么把原始展开得到的式子合并完了如下:

\[\sum_{i=0}^n[k|i]{n\choose i}f_i=\sum_{i=0}^n{n\choose i}f_i\frac{1}{k}\sum_{j=0}^{k-1}\omega_k^{ji} =\frac{1}{k}\sum_{j=0}^{k-1}\sum_{i=0}^n{n\choose i}f_i(\omega_k^j)^i \]

后面的部分把 \(\omega_{k}^j\) 和矩阵做数乘就行了

复杂度 \(\Theta(Tk+8k\log n)\)

需要预处理原根

Loj 6485 LJJ学二项式定理

把几个独立下来之后,考虑 \(a_0\) 的部分,则有

\[\sum_{i=0} ^n \binom ni[4|i] s^i a0 \]

那么换掉式子就是

\[\frac 14\sum_{i=0}^n \sum_{j=0}^3 \binom ni s^i w_{j}^i \]

二项式定理合并即可,对于剩下的几个,被模数就是 \(i+k\) 其实照样推就行了

代码很好写

UOJ450 复读机

本题也是在某种意义上 \(EGF\) 第一题

  • \(\rm{Subtask \ 1}:d=1\)

直接输出 \(k^n\) 即可


以下两个部分均需注意,\(\rm{EGF}\) 的卷积最后乘 \(n!\) 才是正确答案

  • \(\rm{Subtask \ 2}:d=2\)

把脑残式子一写:诶这怎么是 \(EGF\) 卷起来的形式呀?

\[G(x)=\sum_{i=0}^{+\infty} [2|i] \frac{x^i}{i!} \]

答案即 \(G^k(x)[x^n]\)

问题似乎陷入了死节,但是使用 \(e^x=\sum\limits_{i=0}^{+\infty} \frac{x^i}{i!}\) 变换一下:

\[\frac{ans}{n!}=[x^n]G^k(x)=[x^n](\frac{e^x+e^{-x}}2)^k \]

使用 \(e^{kx}=\sum\limits_{i=0}^{+\infty} \frac{(kx)^i}{i!}\) 大力展开所有的取出 \(x^n\) 的系数,得到:

\[\frac{ans}{n!}=\frac1{2^k}\sum_{i=0}^k \binom ki \frac{(2i-k)^n}{n!} \]

使用 \(O(k)\) 的算法可以快速解决这个问题

  • \(\rm{Subtask\ 3}:d=3,k\le 1000\)

仍然使用 \(G(x)=\sum\limits_{i=0}^{+\infty} [3|i]\frac{x^i}{i!}\)\(k\) 次方的系数来计算答案

这时候很悲惨,莫得 \(e^{x}+e^{-x}\) 了,但是出现了可以拿单位根反演化开的东西,继续推到不难得到:

\[G(x)=\sum_{i=0}^{+\infty}\frac{x^i}{i!}\frac 13 \sum_{j=0}^2 \omega_{3}^{ij} \]

(其实 \(-1=\omega_2^1\)

\(\frac{1}3\) 提出来,把 \((\omega_3^j)^i\) 和外面合并之后仍然可以使用 \(e^{kx}\) 的式子简化 \(G(x)\) 的表达

\[G(x)=\frac 13\sum_{i=0}^{+\infty}\frac{(\omega_{3}^0x)^i+(\omega_{3}^1x)^i+(\omega_{3}^2x)^i}{i!}=\frac 13(e^{\omega_3^0+\omega_3^1+\omega_3^2}) \]

这样子再进行 \(k\) 次方操作就会舒适许多,仍然是二项式定理配合组合意义展开

\[G^k(x)=\sum_{i=0}^k\binom ki (e^{\omega_{3}^0})^{k-i}\sum_{j=0}^i \binom ij (e^{\omega_{3}^1})^j(e^{\omega_{3}^2})^{i-j} \]

那么把 \(e\) 的次幂堆到一起展开(不放到一起就没法做了)得到

\[\frac{ans}{n!}=\frac{1}{n!3^k}\sum_{i=0}^k \sum_{j=0}^i \binom ki\binom ij (k-i+\omega_{3}^2(i-j)+\omega_{3}^1j)^n \]

使用原根 \(g=7\)\(\frac{mod-1}3\) 来表示单位根

\(\Theta(k^2)\) 的做法就足够了,代码实现是简单的

posted @ 2021-08-06 15:08  yspm  阅读(162)  评论(3编辑  收藏  举报