Modular Arithmetic 模算术
Modular Arithmetic 模算術(shù)
我們都見(jiàn)過(guò)時(shí)鐘,在時(shí)鐘上有12個(gè)刻度。假設(shè)某天晚上時(shí)針指向6的位置,那么它表示的是晚上六點(diǎn)鐘,可是到了第二天早上,當(dāng)時(shí)針再次指向6時(shí),它表示的又是早上六點(diǎn)鐘。
在上述例子中,我們實(shí)際上是用同一個(gè)刻度來(lái)表示兩個(gè)不同的“六點(diǎn)鐘”,這就是模算術(shù)的基本思路–用同一個(gè)刻度表示不同的值(也可以用輪回來(lái)理解)。
模算術(shù)的定義
令aaa,bbb和nnn為整數(shù)且n>0n>0n>0,那么當(dāng)且僅當(dāng)nnn可以整除(a?b)(a-b)(a?b)時(shí),aaa和bbb是模nnn同余的,寫(xiě)作:
a≡b(modn)?n∣(a?b)a \equiv b\ (\mathrm{mod} \ n) \iff n|(a-b) a≡b?(mod?n)?n∣(a?b)
這里的 n∣(a?b)n|(a-b)n∣(a?b) 表示 kn=(a?b),kkn = (a-b), kkn=(a?b),k為整數(shù)。
什么是同余 Congruence Modulo
當(dāng)kn=(a?b)kn = (a-b)kn=(a?b)時(shí),aaa和bbb可寫(xiě)為:
a=pn+rb=qn+r\begin{aligned} a &= pn+r \\ b &= qn+r \\ \end{aligned} ab?=pn+r=qn+r?
rrr是他們共同的余數(shù),nnn為同余的模數(shù)(也就是除數(shù))。
例如:7(=1×6+1)7( = 1\times6+1)7(=1×6+1)和13(=2×6+1)13 ( = 2 \times 6 + 1)13(=2×6+1)對(duì)模數(shù)6同余。 類(lèi)似的數(shù)還有19,25,31,…\dots…,(n×6+1)(n\times 6 + 1)(n×6+1)。將這些數(shù)畫(huà)在數(shù)軸上,我們可以發(fā)現(xiàn)在每一個(gè)長(zhǎng)度為6的區(qū)間上,都只有一個(gè)這樣的數(shù)存在,并且他們都出現(xiàn)在各自區(qū)間內(nèi)“相同的位置”上。因此我們可以在不同區(qū)間內(nèi)用同一個(gè)刻度表示不同的值。
由對(duì)于模nnn同余的所有整數(shù)組成的集合稱(chēng)為同余類(lèi)。
同余類(lèi) Congruence Class
給定任意整數(shù)b>0b>0b>0,我們可以將數(shù)軸上的整數(shù)劃分到長(zhǎng)度為bbb的區(qū)間內(nèi)。對(duì)于a∈[0,b?1]a \in [0,b-1]a∈[0,b?1],集合{a+kb}\{a + kb\}{a+kb}的所有數(shù)對(duì)于模bbb同余,余數(shù)為aaa,構(gòu)成一個(gè)同余類(lèi),記作:
[a]b={a+kb∣k∈Z}[a]_b = \{a+kb | k \in \mathbb{Z} \} [a]b?={a+kb∣k∈Z}
模算術(shù)的規(guī)則
-
加法:如果有a≡c(modn)a \equiv c \ (\mathrm{mod} \ n)a≡c?(mod?n)和b≡d(modn)b \equiv d \ (\mathrm{mod} \ n)b≡d?(mod?n),那么a+b≡c+d(modn)a+b \equiv c+d\ (\mathrm{mod} \ n)a+b≡c+d?(mod?n)
-
乘法:如果有a≡c(modn)a \equiv c\ (\mathrm{mod} \ n)a≡c?(mod?n)和b≡d(modn)b \equiv d \ (\mathrm{mod} \ n)b≡d?(mod?n),那么ab≡cd(modn)ab \equiv cd \ (\mathrm{mod} \ n)ab≡cd?(mod?n)
-
?a,a≡a(modn)\forall a, a \equiv a\ (\mathrm{mod}\ n)?a,a≡a?(mod?n)
-
如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)a≡b?(mod?n),那么b≡a(modn)b \equiv a\ (\mathrm{mod}\ n)b≡a?(mod?n)
-
如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)a≡b?(mod?n)和b≡c(modn)b \equiv c\ (\mathrm{mod}\ n)b≡c?(mod?n),那么a≡c(modn)a \equiv c\ (\mathrm{mod}\ n)a≡c?(mod?n)
-
如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)a≡b?(mod?n)和n≡0(modm)n \equiv 0\ (\mathrm{mod}\ m)n≡0?(mod?m),那么a≡b(modm)a \equiv b\ (\mathrm{mod}\ m)a≡b?(mod?m)
-
如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)a≡b?(mod?n),那么am≡bm(modn)am \equiv bm\ (\mathrm{mod}\ n)am≡bm?(mod?n)和am≡bm(modn)a^m \equiv b^m\ (\mathrm{mod}\ n)am≡bm?(mod?n)
模的倒數(shù) Multiplicative Inverse
對(duì)于a≡?0(modn)a \not \equiv 0\ (\mathrm{mod} \ n)a?≡0?(mod?n),若有整數(shù)a′a'a′滿(mǎn)足aa′≡1(modn)aa' \equiv 1\ (\mathrm{mod} \ n)aa′≡1?(mod?n),則稱(chēng)a′a'a′為aaa的倒數(shù)。例如:2×5≡1(mod3)2 \times 5 \equiv 1 \ (\mathrm{mod} \ 3)2×5≡1?(mod?3),所以a′=5a' = 5a′=5是整數(shù)2(mod3)2\ (\mathrm{mod} \ 3)2?(mod?3)的倒數(shù)(反之亦然)。
并不是所有的整數(shù)對(duì)于任意模數(shù)都有倒數(shù)。對(duì)于a(modn)a\ (\mathrm{mod} \ n)a?(mod?n),如果整數(shù)aaa和nnn不互質(zhì),那么aaa就沒(méi)有對(duì)于模數(shù)nnn的倒數(shù)。
中國(guó)余數(shù)定理
古時(shí)有一位將軍統(tǒng)領(lǐng)著一支1500人的軍隊(duì),一場(chǎng)大戰(zhàn)過(guò)后,大約400~500人死亡。為了統(tǒng)計(jì)剩下的人數(shù),將軍讓士兵們站成方陣。當(dāng)剩下的人3個(gè)站成一行時(shí),多余2個(gè)人。當(dāng)剩下的人5個(gè)站成一行時(shí),多余4個(gè)人。當(dāng)剩下的人7個(gè)站成一行時(shí),多余6個(gè)人。那么這支軍隊(duì)總共還有多少士兵?
這個(gè)問(wèn)題實(shí)際上就是求解同余方程組
{c1x≡d1(modm1)c2x≡d2(modm2)…ckx≡dk(modmk)\left\{ \begin{aligned} c_1x \equiv d_1\ (\mathrm{mod} \ m_1) \\ c_2x \equiv d_2\ (\mathrm{mod} \ m_2) \\ \dots \\ c_kx \equiv d_k\ (\mathrm{mod} \ m_k) \end{aligned} \right. ????????????c1?x≡d1??(mod?m1?)c2?x≡d2??(mod?m2?)…ck?x≡dk??(mod?mk?)?
先來(lái)思考如何求解 ax≡b(modn)ax \equiv b \ (\mathrm{mod} \ n)ax≡b?(mod?n),
x≡a′b(modn)x \equiv a'b \ (\mathrm{mod} \ n) x≡a′b?(mod?n)
2.1. 如果ccc可以整除bbb:對(duì)于ax≡b(modn)ax \equiv b \ (\mathrm{mod} \ n)ax≡b?(mod?n)可得
ax≡b(modn)?ax=b+nk?a1cx=b1c+n1ck?a1x=b1x+n1k\begin{aligned} &ax \equiv b \ (\mathrm{mod} \ n) \\ \iff &ax = b + nk \\ \iff &a_1cx = b_1c + n_1ck \\ \iff &a_1x = b_1x + n_1k \\ \end{aligned} ????ax≡b?(mod?n)ax=b+nka1?cx=b1?c+n1?cka1?x=b1?x+n1?k?
此時(shí)a1,n1a_1, n_1a1?,n1?互質(zhì),因此可以歸為a,na, na,n互質(zhì)一類(lèi)。
2.2. 如果ccc不能整除bbb:
ax≡b(modn)?ax=b+nk?a1cx=b+n1ck?b=c(a1x?n1k)\begin{aligned} &ax \equiv b \ (\mathrm{mod} \ n) \\ \iff &ax = b + nk \\ \iff &a_1cx = b + n_1ck \\ \iff &b = c(a_1x-n_1k) \\ \end{aligned} ????ax≡b?(mod?n)ax=b+nka1?cx=b+n1?ckb=c(a1?x?n1?k)?
與假設(shè)矛盾,無(wú)解。
經(jīng)過(guò)化簡(jiǎn)(當(dāng)然,也存在無(wú)法化簡(jiǎn)的情況)以后,方程組可寫(xiě)為
{x≡a1(modn1)x≡a2(modn2)…x≡ak(modnk)\left\{ \begin{aligned} x \equiv a_1\ (\mathrm{mod} \ n_1) \\ x \equiv a_2\ (\mathrm{mod} \ n_2) \\ \dots \\ x \equiv a_k\ (\mathrm{mod} \ n_k) \end{aligned} \right. ????????????x≡a1??(mod?n1?)x≡a2??(mod?n2?)…x≡ak??(mod?nk?)?
假設(shè)n1,n2,…,nkn_1, n_2, \dots, n_kn1?,n2?,…,nk?之間兩兩互質(zhì),則該方程組對(duì)于模N=n1n2…nkN = n_1n_2\dots n_kN=n1?n2?…nk?有唯一解,解為
x≡(N1N1′a1+N2N2′a2+?+NkNk′ak)(modN)x \equiv (N_1N_1'a_1 + N_2N_2'a_2 + \dots + N_kN_k'a_k) (\mathrm{mod} \ N) x≡(N1?N1′?a1?+N2?N2′?a2?+?+Nk?Nk′?ak?)(mod?N)
其中Ni=NniN_i = \frac{N}{n_i}Ni?=ni?N?,Ni′N(xiāo)_i'Ni′?為NiN_iNi?對(duì)于模nin_ini?的倒數(shù)。
取模運(yùn)算
在計(jì)算機(jī)中,給定整數(shù)aaa,bbb,取模運(yùn)算就是求aaa除以bbb的余數(shù):aaa%bbb
關(guān)于取余運(yùn)算的實(shí)現(xiàn)邏輯可參考匯編除法原理
總結(jié)
以上是生活随笔為你收集整理的Modular Arithmetic 模算术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决Mac上VSCdoe断点失效问题
- 下一篇: 一、【绪论】数据结构的基本概念