同餘

来自testwiki
跳转到导航 跳转到搜索

Template:NoteTA 同余Template:Lang-en[1]符號:≡)在数学中是指數論中的一種等價關係[2]。當两个整数以同一个正整数,若得相同-{zh-hans:余数; zh-hant:餘數;}-,则二整数同余。同餘是抽象代數中的同餘關係的原型[3]。最先引用同余的概念与「≡」符号者为德國数学家高斯Template:Numbers

定義

對某兩個整数ab,若它们以正整数m所得的余数相等,则称ab对于模m同余,也就是嚴格來說,存在整數k使得

ab=km

則稱a,b對於除數m同餘的。一般記做

ab(modm)

比如

2614=12=1×12

故可以記為

2614(mod12)

但另一方面,從ab=kmba=(k)×m,故ab(modm)等價於

ba(modm)

同餘符號「」其UTF-8碼為U+2261

同餘類

可以證明所有对于模m同餘的整數對構成一個(整数上的)等价关系,換句話說,對於任意兩個整数ab

(1) aa(modm)
(2) [ab(modm)][ba(modm)]
(3) {[ab(modm)][bc(modm)]}[ac(modm)]

故以下的集合

[a]m:={z|(k)(z=a+km)}
={,a2m,am,a,a+m,a+2m,}

可稱為a对于模m同余類Template:LangTemplate:Lang),也可標記為am;模m在上下文很清楚時,也可簡記為[a]a會被稱為該同余類的代表數Template:Lang[4]

剩餘系

剩餘系[5][6]Template:Lang-en)亦即模n同餘類的代表數的集合,通常使用的代表數是最小非負整數,因為它是除法中的應當餘數。要注意的是,對於同一個模數n,不同的同餘類不等價,亦即,屬於不同同餘類的整數不同餘於模數n,或者說,模n剩餘系中的任二元素不同餘於模n;而且,整數域中的每個整數只屬於模數n的一個同餘類,因為模n將整數域划分為互斥區塊,每個區塊是一個同餘類。

一個完全剩餘系Template:Lang-en)指的是模n的全部同餘類的代表數的集合;因為剩餘系中的任二元素不同餘於模n,所以它也稱為非同餘餘數的完整系統Template:Lang-en)。例如,模3有三個同餘類[0],[1],[2],其完全剩餘系可以是{9,12+1,15+2}。如果該集合是由每個同餘類的最小非負整數所組成,亦即{0,1,2,...,n1},則稱該集合為模n最小剩餘系Template:Lang-en)。

n完全剩餘系中,與模n互質的代表數所構成的集合,稱為模n簡約剩餘系Template:Lang-en),其元素個數記為ϕ(n),亦即欧拉函数。例如,模6的簡約剩餘系為{1,5}{7,11}。如果模n質數,那麼它的最小簡約剩餘系是{1,2,...,n1},只比最小剩餘系少一個0

性质

整除性

ab(modm)cm=ab,c (即是說 a 和 b 之差是 m 的倍數)
換句話說,ab(modm)m(ab)Template:NoteTag

同余可以用来检验一个数是否可以整除另外一个数,见整除规则

传递性

ab(modm)bc(modm)}ac(modm)

保持基本运算

ab(modm)cd(modm)}{a±cb±d(modm)acbd(modm)
c=d時,則為等量加法、減法:a±cb±c(modm)
這性質更可進一步引申成為這樣:
ab(modm){anbn(modm),nanbn(modm),n*P(a)P(b)(modm)Template:NoteTag
其中P(x)为任意整系数多项式函数。

放大縮小底數

k為整數,n為正整數,(km±a)n(±a)n(modm)

放大縮小模數

k為正整數,ab(modm)若且唯若kakb(modkm)

除法原理一

kakb(modm)k,m互質,則ab(modm)

除法原理二

每個正整數都可以分解為數個因數的乘積,稱為整数分解。例如 15=3×5,因數 35 都可以整除 15,記為 3|155|15。如果 15 可以整除某正整數 a,亦即 15|a,那麼 15 就是 a 的因數:a=15×b,其中 b 為另一因數。a=15×b=(3×5)×b,因此,15 的因數也可以整除 a(3|15)(15|a)3|a

ab(modm) 等價於 (ab)0(modm),也就是 m|(ab)。亦即,如果 m|(ab),那麼它可以寫成 ab(modm),因此有以下除法原理:

m 的因數也可以整除 (ab)。亦即,mn倍數m=c×nn|m。因為 m|(ab),所以 n|(ab)ab(modn)
ab(modcn)ab(modn)
ab(modm)n|m}ab(modn)Template:NoteTag
現假設 m 可以整除 (ab) 的倍數 c(ab)。如果 mc 互質(記為 (m,c)=1),那麼 m 必定可以整除 (ab)m|(ab)ab(modm)
acbc(modm)(c,m)=1}ab(modm)Template:NoteTag
如果 m1|(ab) 而且 m2|(ab),那麼 m1m2最小公倍数必定可以整除 (ab),記為 ab(mod[m1,m2])。這可以推廣成以下性質:
ab(modm1)ab(modm2)ab(modmn)(n2)}ab(mod[m1,m2,,mn])Template:NoteTag
上面的最後一個性質可以使用算术基本定理集合來解釋。一個大於1的正整數 q 可以分解為一串質數冪的乘積:q=p1c1×p2c2×...×pncnpi 兩兩相異,且ci>0),令 Sq 為所有能整除 q 的質數冪的集合,即 Sq={p1,p12,,p1c1,p2,p22,,p2c2,,pn,pn2,,pncn}。設 r 為正整數,則 r 整除 q,當且僅當 SrSq子集。令 m1|qm2|q,則Sm1Sm2聯集必定也是 Sq 的子集。取這個聯集中冪次最高的各個元素,它們的乘積就是 m1m2最小公倍数[m1,m2]。事實上,有 S[m1,m2]=Sm1Sm2,所以 [m1,m2] 也能夠整除 q

同余关系式

威尔逊定理

Template:Main (p1)!  1 (mod p)

费马小定理

Template:Main ap11(modp)

欧拉定理

Template:Main aφ(n)1(modn)

卡邁克爾函數

Template:Main aλ(n)1(modn)

阶乘幂

Template:Main (x)kx(x1)(x2)(xk+1)0(modk!)

卢卡斯定理

Template:Main (mn)i=0k(mini)(modp),

组合数最小周期

(m+pk+[logpn]n)(mn)(modpk)

N=ipiki,则(m+L(n,N)n)(mn)(modN),其中L(n,N)=ipiki+[logpn]=Nipi[logpn][7]

相关概念

模反元素

Template:Main a1a˙1(modn)

可用輾轉相除法歐拉定理卡邁克爾函數求解。

原根

Template:Main 存在最小的正整数d使得ad1(modn)成立,且d=φ(n)

同余方程

线性同余方程

Template:Main axb(modn)

考虑最大公约数,有解时用輾轉相除法等方法求解。

线性同余方程组

Template:Main {a1xb1(modm1)a2xb2(modm2)anxbn(modmn)

先求解每一个线性同余方程,再用中国剩余定理解方程组。

二次剩余

Template:Main x2d(modp)

勒让德符号雅可比符号克罗内克符号二次互反律用于判别d是否为模n的二次剩余。

高次剩餘

Template:Main xnd(modp)

例子

  • 自然数a的个位数字,就是求a与哪一个数对于模10同余。
  • 101(mod 3),10n1(mod 3),10001104+11+1(mod 3)

應用

模數算術在數論群論環論紐結理論抽象代數計算機代數密碼學計算機科學化學視覺音樂等學科中皆有應用。

它是數論的立基點之一,與其各個面向都相關。

模數算術經常被用於計算標識符中所使用的校验和,比如国际银行账户号码(IBANs)就用到了模97的算術,來捕獲用戶在輸入銀行帳戶號碼時的錯誤。

於密碼學中,模數算術是RSA迪菲-赫尔曼密钥交换公鑰系統的基礎,它同時也提供有限域,應用於 橢圓加密,且用於許多對稱密鑰加密中,包括高级加密标准國際資料加密演算法等。

於計算機科學, 同餘被應用於位元運算或其他與固定寬度之循環資料結構相關的操作。

於化學中, CAS號(一個對各種化合物皆異之的識別碼)的最後一碼為校驗碼,將CAS號首二部分最後的數字乘上一,下一碼乘上二,下一碼乘上三以此類推,將所有積加起來再取模10。

在音樂領域,模12用於十二平均律系統。

星期的計算中取模7算術極重要。

更廣泛而言,同餘在法律經濟(見賽局理論)或其他社會科學領域中也有應用。

範例

以下為快速展示小於63位元無號整數之模數乘法的C程式,且轉換過程中不發生溢位。計算 a * b (mod m)之演算法:

uint64_t mul_mod(uint64_t a, uint64_t b, uint64_t m)
{
   uint64_t d = 0, mp2 = m >> 1;
   int i;
   if (a >= m) a %= m;
   if (b >= m) b %= m;
   for (i = 0; i < 64; ++i)
   {
       d = (d > mp2) ? (d << 1) - m : d << 1;
       if (a & 0x8000000000000000ULL)
           d += b;
       if (d > m) d -= m;
       a <<= 1;
   }
   return d%m;
}


注释

Template:NoteFoot

参考文献

Template:Reflist

参见

Template:Portal box