单位根反演
恒等式
\[ [d|n]=\frac{1}{d} \sum_{i=0}^{d-1} \omega_d^{i\times n} \]
其中 \(\omega_d\) 是 \(d\) 次单位根
当 \(d|n\),右边和式中每一项都为 \(1\)
当 \(d\nmid n\),容易得到右边为 \(0\)
例题
PYXFIB
题意
令数列 \(f_0=f_1=1,f_n=f_{n-1}+f_{n-2}\)
给出 \(n,k,p\)
求
\[ \sum_{i=0}^{\lfloor \frac{n}{k} \rfloor} \binom{n}{i\times k}\times f_{i\times k} \]
模质数 \(p\) 的值,且 \(p \equiv 1 \pmod{k}\)
不超过 \(20\) 组数据
\(n\le 10^{18}, p\le 10^9, k\le 20000\)
做法
所求转化为
\[ \sum_{i=0}^n [k|i] \binom{n}{i}\times f_{i} \]
考虑用递推矩阵代替 \(f\) 数列
令
\[ A= \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \]
所求即为
\[ \sum_{i=0}^n [k|i] \binom{n}{i}\times A^i \]
第一行第一列的元素
把恒等式代入得到
\[ \begin{aligned} & \frac{1}{k}\sum_{i=0}^n \binom{n}{i}\times A^i \sum_{j=0}^{k-1} \omega_k^{i\times j} \\ = & \frac{1}{k} \sum_{j=0}^{k-1} \sum_{i=1}^n \binom{n}{i}\times A^i \times \omega_{k}^{i\times j} \\ = & \frac{1}{k} \sum_{j=0}^{k-1}\left(\omega_k^jA+I \right)^n \end{aligned} \]
最后一步用了二项式定理,其中 \(I=\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\)
由于保证了 \(p \equiv 1 \pmod{k}\),直接在模意义下计算 \(\omega_k\) 即可
复杂度 \(\mathcal O(k\log n)\)
代码
1 |
|
LJJ 学二项式定理
题意
\(T\) 组数据,给出 \(n,s,a_0,a_1,a_2,a_3\)
求
\[ \left(\sum_{i=0}^n \binom{n}{i}\times s^i\times a_{i\bmod 4}\right) \bmod 998244353 \]
\(T\le 10^5,n\le 10^{18}\)
\(s,a_0,a_1,a_2,a_3\le 10^8\)
做法
考虑计算 \(i\) 是 \(4\) 的倍数情况
\[ \begin{aligned} & \sum_{i=0}^n [4|i] \binom{n}{i}\times s^i\times a_0 \\ = & \frac{1}{4} \sum_{i=0}^n \binom{n}{i}\times s^i\times a_0 \sum_{j=0}^3 \omega_4^{i\times j} \\ = & \frac{a_0}{4}\sum_{j=0}^3 \sum_{i=0}^n \omega_4^{i\times j} \times \binom{n}{i}\times s^i \\ = & \frac{a_0}{4}\sum_{j=0}^3 (\omega_4^j\times s +1)^n \end{aligned} \]
其他 \(3\) 种情况也类似,以 \(i\equiv 1\pmod 4\) 为例
\[ \begin{aligned} & \sum_{i=0}^n [4|(i-1)] \binom{n}{i}\times s^i\times a_1 \\ = & \frac{1}{4} \sum_{i=0}^n \binom{n}{i}\times s^i\times a_1 \sum_{j=0}^3 \omega_4^{(i-1)\times j} \\ = & \frac{a_1}{4}\sum_{j=0}^3 \sum_{i=0}^n \omega_4^{(i-1)\times j} \times \binom{n}{i}\times s^i \\ = & \frac{a_1}{4}\sum_{j=0}^3 \omega_4^{-j} (\omega_4^j\times s +1)^n \end{aligned} \]
复杂度 \(\mathcal O(\log n)\)
代码
1 |
|
复读机
题意
有 \(k\) 个不同的复读机,接下来 \(n\) 秒中每秒都会挑一个复读机复读,一个复读机复读了 \(d\) 的倍数次才会感到快乐
求有多少种方案使得所有复读机都感到快乐,模 \(19491001\)
三种子任务
- \(k\le 500000,d=1\)
- \(k\le 500000,d=2\)
- \(k\le 1000,d=3\)
\(n\le 10^9\)
做法
当 \(d=1\) 时,答案即为 \(k^n\)
\(d>1\) 时考虑 dp
令 \(f_{i,j}\) 表示 \(i\) 个复读机,一共复读了 \(j\) 次的方案数(方案不同当且仅当存在第 \(x\) 次复读的复读机不同)
于是
\[ \begin{aligned} f_{i,j} & = \sum_{x=0}^{j} [d|x] f_{i-1,j-x}\binom{j}{x} \\ & = \frac{1}{d} \sum_{x=0}^j f_{i-1,j-x} \binom{j}{x} \sum_{t=0}^{d-1} \omega_d^{tx} \\ \frac{f_{i,j}}{j!} &= \frac{1}{d} \sum_{x=0}^j \frac{f_{i-1,j-x}}{(j-x)!} \times \frac{\sum_{t=0}^{d-1} \omega_d^{tx}}{x!} \end{aligned} \]
用生成函数表示第二维的转移即
\[ \begin{aligned} f_i(x) & = \sum_{j=0}^{\infty} f_{i,j}x^j \\ f_i(x) & = f_{i-1}(x)\times \left(\frac{\sum_{j=0}^{\infty} \sum_{t=0}^{d-1} \frac{\omega_d^{tj}}{j!}x^j }{d}\right) \\ f_k(x) & = \left(\frac{\sum_{j=0}^{\infty} \sum_{t=0}^{d-1} \frac{\omega_d^{tj}}{j!}x^j }{d}\right) ^k \\ & = \left(\frac{\sum_{t=0}^{d-1} \sum_{j=0}^{\infty} \frac{\omega_d^{tj}}{j!}x^j }{d}\right) ^k \end{aligned} \]
当 \(d=2\) 时,展开 \(t\) 的枚举,得到
\[ \left(\sum_{j=0}^{\infty} \frac{x^j}{j!}\right)+\left(\sum_{j=0}^{\infty} \frac{\omega_2^j x^j}{j!}\right) = e^x+e^{\omega_2x} \]
其中 \(\omega_2=-1\)
所求
\[ \begin{aligned} f_{k,n} & = n![x^n]f_k(x) \\ & = n![x^n]\left(\frac{e^x+e^{-x}}{2}\right)^k \\ & = \frac{n![x^n]\left(\sum_{i=0}^k e^{ix} \times e^{-(k-i)x}\times \binom{k}{i}\right)}{2^k} \end{aligned} \]
复杂度 \(\mathcal O(k\log n)\)
\(d=3\) 同理,展开
\[ \left( \frac{e^x+e^{\omega_3 x}+e^{\omega_3^2 x}}{3}\right)^k \]
枚举其中两项,复杂度 \(\mathcal O(k^2\log n)\)
代码
1 |
|
倍数?倍数!
题意
求从 \(0,1,\dotsc,n-1\) 选出 \(k\) 个互不相同的数和为 \(n\) 的倍数的方案数,模 \(10^9+7\)
\(n\le 10^9, k\le 1000\)
做法
神仙题
先不考虑 \(k\) 的限制,求从 \(0,1,\dotsc,n-1\) 中选出任意个数和为 \(n\) 的倍数的方案数
考虑生成函数,答案为
\[ f(x) = \prod_{i=0}^{n-1} (x^i+1) = \sum_{i=0}^\infty f_ix^i \]
的所有 \(n\) 的倍数次项系数的和,即
\[ \begin{aligned} & \sum_{i=0}^\infty [n|i]\times f_i \\ = & \frac{1}{n} \sum_{i=0}^\infty f_i \sum_{j=0}^{n-1} \omega_n^{i\times j} \\ = & \frac{1}{n} \sum_{j=0}^{n-1} \sum_{i=0}^\infty f_i(\omega_n^j)^i \\ = & \frac{1}{n} \sum_{j=0}^{n-1} f(\omega_n^j) \\ = & \frac{1}{n} \sum_{j=0}^{n-1} \prod_{i=0}^{n-1} (\omega_n^{i\times j}+1) \end{aligned} \]
枚举 \(g=\gcd(j,n)\),由单位根的性质,上式等于
\[ \begin{aligned} & \frac{1}{n} \sum_{g|n} \sum_{j=0}^{\frac{n}{g} -1} [j \perp \frac{n}{g}] \prod_{i=0}^{n-1} (\omega_{\frac{n}{g}}^{i\times j}+1) \\ = & \frac{1}{n} \sum_{g|n} \sum_{j=0}^{\frac{n}{g} -1} [j \perp \frac{n}{g}] \left( \prod_{i=0}^{\frac{n}{g}-1} (\omega_{\frac{n}{g}}^{i\times j}+1)\right)^g \\ \end{aligned} \]
由于 \(j\) 与 \(\frac{n}{g}\) 互质,上式等于
\[ \begin{aligned} & \frac{1}{n} \sum_{g|n} \sum_{j=0}^{\frac{n}{g} -1} [j \perp \frac{n}{g}] \left( \prod_{i=0}^{\frac{n}{g}-1} (\omega_{\frac{n}{g}}^{i}+1)\right)^g \\ = & \frac{1}{n} \sum_{g|n} \varphi(\frac{n}{g}) \left( \prod_{i=0}^{\frac{n}{g}-1} (\omega_{\frac{n}{g}}^{i}+1)\right)^g \end{aligned} \]
考虑单位根的意义 \(x^n-1=0=\prod_{i=0}^{n-1} (x-\omega_n^i)\)
代入 \(x=-1\) 得到 \((-1)^n-1=(-1)^n \prod_{i=0}^{n-1} (\omega_n^i+1)\)
因此 \(\prod_{i=0}^{n-1} (\omega_n^i+1)=1-(-1)^n\)
答案等于
\[ \frac{1}{n} \sum_{g|n} \varphi(\frac{n}{g}) \left(1-(-1)^{\frac{n}{g}}\right)^g \]
考虑有了选 \(k\) 个的限制
答案为
\[ [y^k]\prod_{i=0}^{n-1} (x^iy+1) \]
的所有 \(n\) 的倍数次项系数的和
大致过程与上面相同,把 \(y\) 保留,在代入时代入 \(-\frac{1}{y}\),最后得到
\[ \frac{1}{n} \sum_{g|n} \varphi(\frac{n}{g}) \left(1-(-y)^{\frac{n}{g}}\right)^g \]
求第 \(k\) 项系数
要对答案有贡献,记 \(d=\frac{n}{g}\)
必须满足 \(d|k\),因此 \(\varphi(d)\) 的部分可以做到 \(\mathcal O(k)\)
另外还要求 \(\binom{g}{\frac{k}{d}}\),单次 \(\mathcal O(\frac{k}{d})\),总复杂度 \(\mathcal O(\sigma_1(k))\approx \mathcal O(k\log \log k)\)
所以 \(k\) 还可以放大一点
代码
1 |
|