1. 题目背景与核心问题解析
洛谷P2480 [SDOI2010]古代猪文是一道经典的数论组合题目,题目背景设定在古代猪文石碑上刻有神秘文字。这道题看似神秘,实则考察了多个重要数论知识点的综合运用能力。
题目给出两个正整数N和G,要求计算G^ΣC(N,k) (k|N) mod 999911659的值。这里有几个关键点需要理解:
- 组合数求和:ΣC(N,k)表示对所有能整除N的正整数k,求组合数C(N,k)的和
- 超大指数运算:由于N的范围可以达到1e9,直接计算组合数之和显然不可行
- 模数性质:模数999911659是一个质数,这为后续解题提供了重要线索
在实际比赛中,这道题的正确率往往不足30%,主要原因在于解题需要串联多个数论知识点,任何一环出错都会导致结果错误。接下来我将详细拆解每个关键步骤的实现原理和注意事项。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路与数学原理
2.1 问题转化与费马小定理应用
首先观察到模数999911659是质数,根据费马小定理:
当a不被p整除时,a^(p-1) ≡ 1 mod p
因此,当G与999911659互质时:
G^ΣC(N,k) ≡ G^(ΣC(N,k) mod (p-1)) mod p
这让我们把问题转化为:
- 计算指数部分ΣC(N,k) mod (p-1)
- 然后计算G的该指数次方模p
特别地,当G是p的倍数时,结果直接为0(需要特判)
2.2 指数部分的模数分解
关键发现:p-1 = 999911658 = 2 × 3 × 4679 × 35617
这提示我们可以使用中国剩余定理(CRT)来分解问题:
- 分别计算ΣC(N,k) mod mi,其中mi取分解后的质因数
- 然后用CRT合并这些同余式得到ΣC(N,k) mod (p-1)
2.3 组合数模小质数计算
对于每个质因数mi,我们需要计算C(N,k) mod mi。这里使用Lucas定理:
C(N,k) ≡ Π C(Ni,ki) mod mi
其中Ni和ki是N和k在mi进制下的各位数字
实现时需要:
- 预处理阶乘和逆元数组
- 对每个k|N,用Lucas定理计算C(N,k) mod mi
- 将所有结果相加得到ΣC(N,k) mod mi
