日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Modular Arithmetic 模算术

發(fā)布時(shí)間:2025/3/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Modular Arithmetic 模算术 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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ù)的定義
aaabbbnnn為整數(shù)且n>0n>0n>0,那么當(dāng)且僅當(dāng)nnn可以整除(a?b)(a-b)(a?b)時(shí),aaabbb是模nnn同余的,寫(xiě)作:

a≡b(modn)?n∣(a?b)a \equiv b\ (\mathrm{mod} \ n) \iff n|(a-b) ab?(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í),aaabbb可寫(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+kbkZ}

模算術(shù)的規(guī)則

  • 加法:如果有a≡c(modn)a \equiv c \ (\mathrm{mod} \ n)ac?(mod?n)b≡d(modn)b \equiv d \ (\mathrm{mod} \ n)bd?(mod?n),那么a+b≡c+d(modn)a+b \equiv c+d\ (\mathrm{mod} \ n)a+bc+d?(mod?n)

  • 乘法:如果有a≡c(modn)a \equiv c\ (\mathrm{mod} \ n)ac?(mod?n)b≡d(modn)b \equiv d \ (\mathrm{mod} \ n)bd?(mod?n),那么ab≡cd(modn)ab \equiv cd \ (\mathrm{mod} \ n)abcd?(mod?n)

  • ?a,a≡a(modn)\forall a, a \equiv a\ (\mathrm{mod}\ n)?a,aa?(mod?n)

  • 如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)ab?(mod?n),那么b≡a(modn)b \equiv a\ (\mathrm{mod}\ n)ba?(mod?n)

  • 如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)ab?(mod?n)b≡c(modn)b \equiv c\ (\mathrm{mod}\ n)bc?(mod?n),那么a≡c(modn)a \equiv c\ (\mathrm{mod}\ n)ac?(mod?n)

  • 如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)ab?(mod?n)n≡0(modm)n \equiv 0\ (\mathrm{mod}\ m)n0?(mod?m),那么a≡b(modm)a \equiv b\ (\mathrm{mod}\ m)ab?(mod?m)

  • 如果有a≡b(modn)a \equiv b\ (\mathrm{mod}\ n)ab?(mod?n),那么am≡bm(modn)am \equiv bm\ (\mathrm{mod}\ n)ambm?(mod?n)am≡bm(modn)a^m \equiv b^m\ (\mathrm{mod}\ n)ambm?(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)aa1?(mod?n),則稱(chēng)a′a'aaaa的倒數(shù)。例如:2×5≡1(mod3)2 \times 5 \equiv 1 \ (\mathrm{mod} \ 3)2×51?(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ù)aaannn不互質(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?xd1??(mod?m1?)c2?xd2??(mod?m2?)ck?xdk??(mod?mk?)?

先來(lái)思考如何求解 ax≡b(modn)ax \equiv b \ (\mathrm{mod} \ n)axb?(mod?n)

  • 當(dāng)gcd(a,n)=1\mathrm{gcd}(a, n) = 1gcd(a,n)=1時(shí):aaannn互質(zhì),因此存在a′a'a使得aa′≡1(modn)aa' \equiv 1 \ (\mathrm{mod} \ n)aa1?(mod?n)。我們對(duì)式子兩邊同乘a′a'a,得
    x≡a′b(modn)x \equiv a'b \ (\mathrm{mod} \ n) xab?(mod?n)
  • 當(dāng) gcd(a,n)=c>1\mathrm{gcd}(a, n) = c > 1gcd(a,n)=c>1時(shí):
    2.1. 如果ccc可以整除bbb:對(duì)于ax≡b(modn)ax \equiv b \ (\mathrm{mod} \ n)axb?(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} ????axb?(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} ????axb?(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. ????????????xa1??(mod?n1?)xa2??(mod?n2?)xak??(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ù)aaabbb,取模運(yùn)算就是求aaa除以bbb的余數(shù):aaa%bbb
    關(guān)于取余運(yùn)算的實(shí)現(xiàn)邏輯可參考匯編除法原理

    總結(jié)

    以上是生活随笔為你收集整理的Modular Arithmetic 模算术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。