「SDOI2010」古代猪文 - 数论 + Lucas 定理
题意描述
给定整数 \(g\),\(n\)(\(1 \leq q, n \leq 10^9\)),计算:
\[ g^{\sum_{d|n}{C_{n}^{d}}} \operatorname{mod} 999911659 \]
解题思路
\(999911659\) 为质数,显然与 \(g\) 互质。
对于该式,我们可以用欧拉定理推论转化为:
\[ g^{\sum_{d|n}{C_{n}^{d}} \bmod \varphi(999911659)} \bmod 999911659 \\ = g^{\sum_{d|n}{C_{n}^{d}} \bmod 999911658} \bmod 999911659 \]
于是该题可转化为求出 \(\sum_{d|n}{C_{n}^{d}} \operatorname{mod} 999911658\)。
我们将 \(999911658\) 分解质因数,可得 \(888811658 = 2 \times 3 \times 4679 \times 35617\),其中没有相同的质因数。
于是对于方程 \(x \equiv \sum_{d|n}{C_{n}^{d}} \pmod {999911658}\),显然对于下列同余方程组:
\[ \begin{cases} x \equiv \sum_{d|n}{C_{n}^{d}} \pmod {2} \\ x \equiv \sum_{d|n}{C_{n}^{d}} \pmod {3} \\ x \equiv \sum_{d|n}{C_{n}^{d}} \pmod {4679} \\ x \equiv \sum_{d|n}{C_{n}^{d}} \pmod {35617} \end{cases} \]
其中 \(x\) 的解即为方程 \(x \equiv \sum_{d|n}{C_{n}^{d}} \pmod {999911658}\) 的解。
我们先对 \(n\) 分解质因数,再用中国剩余定理求出该方程组的解,用 Lucas 定理和预处理阶乘及逆元优化求解 \(C_{n}^{d} \bmod p\)。最终利用快速幂求出 \(g^x \bmod 999911659\) 即得出答案。
代码演示
1 |
|