P2480 [SDOI2010] 古代猪文 题解
true
古代猪文
SDOI 2010
省选/NOI-
#9d3dcf
- Luogu P2480
- LibreOJ L10229
- AcWing 213
- BZOJ #1951
题目要求我们求出 $g^{\sum_{d | n}C_n^d} \bmod{999911659}$ 的值。
因为 $999911659$ 是一个质数,我们可以根据费马小定理,将式子化简为 $g^{\sum_{d | n}C_n^d \bmod{999911658}} \bmod{999911659}$。
显然 $999911658$ 不是一个质数。将其分解,可得 $999911658 = 2 \times 3 \times 4679 \times 35617$。
卢卡斯定理解决不了模数非质数的情况,那么我们就需要把四个质因数都作为模数过一遍卢卡斯定理解决 $C_n^d$ 的值,算出 $\sum_{d | n}C_n^d$ 的值之后用中国剩余定理合并四个式子即可。
假设我们四次计算得到的结果分别是 $a_1$、$a_2$、$a_3$、$a_4$,那我们就需要解如下的同余方程组:
$$
\begin{cases}
x \equiv a_1 \pmod{2} \\
x \equiv a_2 \pmod{3} \\
x \equiv a_3 \pmod{4679} \\
x \equiv a_4 \pmod{35617}
\end{cases}
$$
得到的 $x$ 就是一个可以接受的数据范围了。
代码如下:
1 |
|