引入


考试的原题忘了,那么我们先来看一个古老的问题:

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

即求满足以下条件的整数:除以333222,除以555333,除以777222

该问题最早见于《孙子算经》中,并有该问题的具体解法。

宋朝数学家秦九韶124712471247年《数书九章》卷一、二《大衍类》对此类问题做出了完整系统的解答。

上面具体问题的解答口诀由明朝数学家程大位在《算法统宗》中给出:

三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知。

口胡一下,大概是:2×70+3×21+2×15=233=2×105+232 \times 70 + 3 \times 21 + 2 \times 15 = 233 = 2 \times 105 + 232×70+3×21+2×15=233=2×105+23,故答案为232323

可是为什么呢?我们可以用浅显的初等数论 + 线性方程组来解答。

数学定义


逆元

在学习CRT之前,我们先来了解逆元

我们先看定义:

对于非零整数a,ma, ma,m,如果存在bbb使得a×b≡1(modm)a \times b\equiv 1\pmod ma×b1(modm),就称bbbaaa在模mmm意义下的逆元(inverse)。

例如:555333在模777意义下的逆元,3×5=15≡1(mod7)3 \times 5 = 15 \equiv 1 \pmod 73×5=151(mod7)

在模意义下,我们记上文中的bbba−1a ^ {-1}a1(即aaa模倒数

对于求逆元,有一种快速的方法(费马小定理),但我更推荐枚举,毕竟你们不是计算机。

回到正题

中国剩余定理可以用来求解形如以下形式的线性同余方程(其中n1,n2,…,nkn_1, n_2, \dots, n_kn1,n2,,nk两两互质):
{x≡a1(modm1)x≡a2(modm2)⋮x≡ak(modmk) \begin{cases} x \equiv a_1 \pmod {m_1} \\ x \equiv a_2 \pmod {m_2} \\ \vdots \\ x \equiv a_k \pmod {m_k} \end{cases} xa1(modm1)xa2(modm2)xak(modmk)

其中,x≡ai(modmi)x \equiv a_i \pmod {m_i}xai(modmi)表示aia_iaix÷mix \div m_ix÷mi的余数,例如5≡1(mod2)5 \equiv 1 \pmod 251(mod2)

开始解答


欧买噶的,你竟然学会同余线性方程组了超越了LLL

那么,来求xxx吧:

  • 首先,计算∏i=1kmi\prod_{i = 1}^{k} m_ii=1kmi,即所有nin_ini的乘积,记为mmm(不带下标)
  • 接着,对于第iii个方程:
    1. 计算bi=mmib_i = \frac{m}{m_i}bi=mim,即除nin_ini之外所有njn_jnj的乘积
    2. 计算bib_ibi在模mim_imi意义下的逆元(不记得翻回去看),记为bi−1b_i^{-1}bi1
    3. 计算ci=bi×bi−1c_i = b_i \times b_i^{-1}ci=bi×bi1,此时不对mim_imi取模
  • 最后,该线性方程在nnn意义下的唯一解为:x=∑i=1kai×ci(modmi)x = \sum_{i = 1}^{k} a_i \times c_i \pmod {m_i}x=i=1kai×ci(modmi),即xxx等于所有ai×cia_i \times c_iai×ci的和。

回到题目,提取题目中的同余方程组为:
{x≡2(mod3)x≡3(mod5)x≡3(mod7) \begin{cases} x \equiv 2 \pmod 3 \\ x \equiv 3 \pmod 5 \\ x \equiv 3 \pmod 7 \end{cases} x2(mod3)x3(mod5)x3(mod7)

易得,n=105n = 105n=105

x≡2(mod3)x \equiv 2 \pmod 3x2(mod3)为例,我们计算一下:

b=n3=35b = \frac{n}{3} = 35b=3n=35

此时,1×35≡2(mod3),2×35≡1(mod3)1 \times 35 \equiv 2 \pmod 3, 2 \times 35 \equiv 1 \pmod 31×352(mod3),2×351(mod3),即b−1=2b ^ {-1} = 2b1=2,则c=70c = 70c=70

以此类推,我们算得,答案为2×35+1×21+1×15=233≡23(mod105)2 \times 35 + 1 \times 21 + 1 \times 15 = 233 \equiv 23 \pmod{105}2×35+1×21+1×15=23323(mod105),所以答案最小为232323

可以撒花了。

证明


这里空间还蛮大的,写一写证明吧!

正确性保证

由式子x≡∑i=1kai×ci(modm)x \equiv \sum_{i = 1}^{k} a_i \times c_i \pmod {m}xi=1kai×ci(modm),得:
x≡∑i=1kai×ci(modm)≡∑i=1kai×bi×(bi−1(modmi))(modm)≡∑i=1kai(modm) \begin{aligned} x &\equiv \sum_{i = 1}^{k} a_i \times c_i &\pmod {m}\\ &\equiv \sum_{i = 1}^{k} a_i \times b_i \times (b_i^{-1} \pmod {m_i}) &\pmod {m}\\ &\equiv \sum_{i = 1}^{k} a_i &\pmod m \end{aligned} xi=1kai×cii=1kai×bi×(bi1(modmi))i=1kai(modm)(modm)(modm)
这样就满足对于每一个iii其对应的方程,xxx都是成立的。

最优性保证(相当于正确性保证)

口胡一下吧,似乎挺严格:

首先,模意义下的答案具有唯一性:

因为如果存在x≠yx \neq yx=y,则必然存在mim_imi满足x,yx, yx,y不同余。

又因为x<mx < mx<m(余数一定小于除数),

所以xxx一定是满足所有条件的方程组当中最小的。

完结,撒花★,°:.☆( ̄▽ ̄)/$:.°★

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐