算术与数论
中国剩余定理
模数两两互素的同余方程组,在其乘积模下总有唯一解。
直观不用数过7就能点清士兵
一位将军让士兵按每排3人列队,余2人;按每排5人列队,余3人;按每排7人列队,余2人。共有多少士兵?尽管将军从未数过超过7的数,这三个小小的余数(2,3,2)就已经把人数在模3×5×7=105下完全锁定:答案是23(加上105的任意倍数)。这就是中国剩余定理(CRT):只要各模数两两互素,知道模每个mi的余数所包含的信息,与知道模它们的乘积m1m2⋯mk的余数完全相同。它使我们能把模一个巨大数的一次困难计算拆成模其各个因子的若干简单、独立的计算,最后再把结果拼回。
模 m=15=3×5 的剩余类:每个剩余 xmod15 由余数对 (xmod3, xmod5) 唯一确定。中学定理陈述与显式公式
定义: 联立同余方程组
给定两两互素的模m1,…,mk——即gcd(mi,mj)=1(i=j)——以及任意整数a1,…,ak,方程组x≡ai(modmi)(1≤i≤k)要求出一个对每个i都同时满足模mi同余于ai的整数x。设M=m1m2⋯mk,Mi=M/mi,并取yi为Mi在模mi下的逆元(即Miyi≡1(modmi),因gcd(Mi,mi)=1而存在),则解由x≡∑i=1kaiMiyi(modM)显式给出。
x≡ai(modmi)(1≤i≤k),gcd(mi,mj)=1 (i=j) 和式中的每一项aiMiyi都被精心构造为≡ai(modmi)(因为Miyi≡1(modmi)),且对所有j=i满足≡0(modmj)(因为mj是Mi=M/mi的因子)。因此当把整个和式对某个固定的mi取模时,除第i项外其余各项全部消失,只留下ai——恰如所需。
x≡i=1∑kaiMiyi(modM),M=m1⋯mk, Mi=M/mi, Miyi≡1(modmi) 两个模与k个模的对比| 情形 | 假设 | 唯一性所对的模 |
|---|
| 2个模m1,m2 | gcd(m1,m2)=1 | m1m2 |
| k个模m1,…,mk | i=j时gcd(mi,mj)=1 | M=m1⋯mk |
大学定理
若m1,…,mk两两互素(gcd(mi,mj)=1(i=j)),则对任意整数a1,…,ak,方程组x≡ai(modmi)(1≤i≤k)必有解x,且任意两个解在模M=m1⋯mk下同余。
为什么成立?
由于各模数没有公共素因子,模m1余a1与模m2余a2是完全独立的约束——就像分别指定一个点的x坐标与y坐标一样。贝祖等式为我们提供了在某一个模下为1、在其余所有模下为0的"基向量",使我们能把解直接写成线性组合。
证明
我们先证明两个模的情形(k=2),再通过归纳法推广。由gcd(m1,m2)=1,贝祖等式给出整数u,v满足m1u+m2v=1。令x0=a1m2v+a2m1u。
在模m1下检验:由m1u+m2v=1得m2v=1−m1u≡1(modm1),而m1u≡0(modm1),故x0≡a1⋅1+a2⋅0=a1(modm1)。
对称地,在模m2下:m1u=1−m2v≡1(modm2)且m2v≡0(modm2),故x0≡a1⋅0+a2⋅1=a2(modm2)。这证明了k=2时的存在性。
当k=2时的唯一性:若x与x′都是方程组的解,则x−x′≡0(modm1)且x−x′≡0(modm2),即m1与m2都整除d=x−x′。把贝祖等式m1u+m2v=1两边乘以d:得d=dm1u+dm2v。因m2∣d,第一项dm1u是m1m2的倍数;因m1∣d,第二项dm2v也是m1m2的倍数。因此m1m2∣d,即x≡x′(modm1m2)。
对一般的k>2,用归纳法:前两个同余式(由k=2情形)等价于模m1m2的一个同余式;由于m3与m1、m2都互素,它与乘积m1m2也互素,因此可以继续合并,直至k。同时注意显式和式x≡∑i=1kaiMiyi(modM)按完全相同的推理对任意k直接成立:Mi=M/mi与mi互素故逆元yi存在,而每个j=i的项都在Mj中含有因子mi。■
当gcd(m1,m2)=1时,映射ψ(xmodm1m2)=(xmodm1, xmodm2)是环同构Z/(m1m2)Z≅(Z/m1Z)×(Z/m2Z),将ψ限制到可逆元上即可证明φ(m1m2)=φ(m1)φ(m2)。
为什么成立?
这就是CRT的结构意义:模m1m2的算术从字面上看就是两个相互独立的模算术副本(一个模m1,一个模m2)并排运行。这既是欧拉函数φ在互素数上能干净地分解为乘积的原因,也是计算机能够通过在每个小分量上分别计算来加速大整数与密码学运算的原因。
证明
第一,ψ是良定义的:若x≡x′(modm1m2),则m1m2∣(x−x′),故m1与m2都整除x−x′,即x≡x′(modm1)且x≡x′(modm2)。
第二,由于模mi化简保持加法与乘法(已在第一个同余主题中证明),ψ在每个坐标上都保持加法与乘法,因此ψ是环同态。
第三,上面的定理1恰好说明对每一对(a1,a2)都存在映射到它的x(故ψ是满射),且该x在模m1m2下唯一(故ψ是单射)。因此ψ是双射,从而是环同构。
最后,在积环R1×R2中,元素(u1,u2)有乘法逆元(v1,v2)当且仅当在R1中有u1v1=1且在R2中有u2v2=1——也就是说当且仅当两个坐标都可逆。由于环同构保持可逆性,Z/(m1m2)Z中的可逆元(共φ(m1m2)个)与(Z/m1Z)×(Z/m2Z)中的可逆元对(共φ(m1)φ(m2)对)一一对应。两边计数即得φ(m1m2)=φ(m1)φ(m2)。再结合素数幂的φ(pr)=pr−pr−1(此时不互素的数恰好是p的pr−1个倍数),立即推出上一主题所使用的φ(n)一般乘积公式。■
进阶实际应用与典型例题
除经典趣题外,中国剩余定理更是现代计算的主力工具。所有生产级RSA实现(OpenSSL、BoringSSL、硬件安全模块)都使用CRT-RSA(Quisquater–Couvreur,1982年),通过分别在模p与模q下计算再用CRT合并来求cdmodpq——速度大约提升4倍,因为模幂运算的开销为O((logm)3),把模数的比特长度减半会使每次模幂的工作量降为原来的23=8分之一(做两次,总体快8/2=4倍)。同样的思想也支撑着快速大整数库与同态加密中的剩余数系统(RNS),以及天文与历法周期的计算。
例题: 求解孙子原版的点兵问题
求满足x≡2(mod3)、x≡3(mod5)与x≡2(mod7)的所有整数x。
解答
模m1=3,m2=5,m3=7两两互素,乘积为M=3×5×7=105,因此可应用显式CRT公式,其中M1=105/3=35,M2=105/5=21,M3=105/7=15。
分别求Mi在模mi下的逆元yi:(1)35≡2(mod3),且2×2=4≡1(mod3),故y1=2;(2)21≡1(mod5),故y2=1;(3)15≡1(mod7),故y3=1。
以(a1,a2,a3)=(2,3,2)代入x≡∑i=1kaiMiyi(modM):x≡2⋅35⋅2+3⋅21⋅1+2⋅15⋅1=140+63+30=233(mod105)。
因233=2×105+23,对模105化简得x≡23(mod105)。快速验算:23=3×7+2≡2(mod3),23=5×4+3≡3(mod5),23=7×3+2≡2(mod7)。三条全都成立,最小正整数解为**23**。
例题: 利用CRT加速RSA解密(CRT-RSA)
在上一主题的RSA例子中(p=5,q=11,n=55,d=27,密文c=8),请不要直接在模55下计算,而是拆成模5与模11的两个小计算来求m=827mod55。
解答
模p=5:将底数化简为8≡3(mod5),并用费马小定理把指数d=27按模p−1=4化简(27=4×6+3,故dp=3)。于是mp=33=27≡2(mod5)——只需算一次很小的立方!
模q=11:底数为8,用费马定理把指数27按模q−1=10化简(27=10×2+7,故dq=7)。计算87mod11:因8≡−3(mod11),有82≡9≡−2,84≡4,87=84⋅82⋅8≡4⋅(−2)⋅(−3)=24≡2(mod11)。
现在用CRT合并m≡2(mod5)与m≡2(mod11):由于两个余数恰好都是2,模55下的唯一解立即就是m≡2(mod55)(一般当mp,mq不同时,只需套用一次两模CRT公式)。注意我们从未对大于11的数做过平方,也从未用过大于7的指数——对于2048比特的RSA素数,同样的拆分能把解密时间缩短到约四分之一。
研究研究前沿中的CRT:快速算术、故障攻击与格密码
求满足x≡1(mod3)且x≡2(mod5)的最小非负整数x。
若m1=4,m2=9,m3=25,则以这些数为模的CRT方程组的解在模多少下唯一?
关于方程组x≡1(mod4)与x≡0(mod6),以下哪项正确?
为什么CRT能把RSA解密cdmodpq加速大约4倍?