Modular Arithmetic 模算术
Modular Arithmetic 模算術(shù)
我們都見過時鐘,在時鐘上有12個刻度。假設(shè)某天晚上時針指向6的位置,那么它表示的是晚上六點鐘,可是到了第二天早上,當時針再次指向6時,它表示的又是早上六點鐘。
在上述例子中,我們實際上是用同一個刻度來表示兩個不同的“六點鐘”,這就是模算術(shù)的基本思路–用同一個刻度表示不同的值(也可以用輪回來理解)。
模算術(shù)的定義
令aaa,bbb和nnn為整數(shù)且n>0n>0n>0,那么當且僅當nnn可以整除(a?b)(a-b)(a?b)時,aaa和bbb是模nnn同余的,寫作:
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
當kn=(a?b)kn = (a-b)kn=(a?b)時,aaa和bbb可寫為:
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)對模數(shù)6同余。 類似的數(shù)還有19,25,31,…\dots…,(n×6+1)(n\times 6 + 1)(n×6+1)。將這些數(shù)畫在數(shù)軸上,我們可以發(fā)現(xiàn)在每一個長度為6的區(qū)間上,都只有一個這樣的數(shù)存在,并且他們都出現(xiàn)在各自區(qū)間內(nèi)“相同的位置”上。因此我們可以在不同區(qū)間內(nèi)用同一個刻度表示不同的值。
由對于模nnn同余的所有整數(shù)組成的集合稱為同余類。
同余類 Congruence Class
給定任意整數(shù)b>0b>0b>0,我們可以將數(shù)軸上的整數(shù)劃分到長度為bbb的區(qū)間內(nèi)。對于a∈[0,b?1]a \in [0,b-1]a∈[0,b?1],集合{a+kb}\{a + kb\}{a+kb}的所有數(shù)對于模bbb同余,余數(shù)為aaa,構(gòu)成一個同余類,記作:
[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
對于a≡?0(modn)a \not \equiv 0\ (\mathrm{mod} \ n)a?≡0?(mod?n),若有整數(shù)a′a'a′滿足aa′≡1(modn)aa' \equiv 1\ (\mathrm{mod} \ n)aa′≡1?(mod?n),則稱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ù)對于任意模數(shù)都有倒數(shù)。對于a(modn)a\ (\mathrm{mod} \ n)a?(mod?n),如果整數(shù)aaa和nnn不互質(zhì),那么aaa就沒有對于模數(shù)nnn的倒數(shù)。
中國余數(shù)定理
古時有一位將軍統(tǒng)領(lǐng)著一支1500人的軍隊,一場大戰(zhàn)過后,大約400~500人死亡。為了統(tǒng)計剩下的人數(shù),將軍讓士兵們站成方陣。當剩下的人3個站成一行時,多余2個人。當剩下的人5個站成一行時,多余4個人。當剩下的人7個站成一行時,多余6個人。那么這支軍隊總共還有多少士兵?
這個問題實際上就是求解同余方程組
{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?)?
先來思考如何求解 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:對于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?
此時a1,n1a_1, n_1a1?,n1?互質(zhì),因此可以歸為a,na, na,n互質(zhì)一類。
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è)矛盾,無解。
經(jīng)過化簡(當然,也存在無法化簡的情況)以后,方程組可寫為
{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ì),則該方程組對于模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_i'Ni′?為NiN_iNi?對于模nin_ini?的倒數(shù)。
取模運算
在計算機中,給定整數(shù)aaa,bbb,取模運算就是求aaa除以bbb的余數(shù):aaa%bbb
關(guān)于取余運算的實現(xiàn)邏輯可參考匯編除法原理
總結(jié)
以上是生活随笔為你收集整理的Modular Arithmetic 模算术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Mac上VSCdoe断点失效问题
- 下一篇: 一、【绪论】数据结构的基本概念