網絡安全數論基礎(1)歐幾里得算法

一、先介紹一下整除性和帶餘除法

整除性

設a、b、m均爲整數,若存在某個m使得a=mb成立,則稱非零數b整除a。換言之,若b除a沒有餘數,則認爲b整除a。b除a通常用b|a,我們說b是a的一個因子。
注:被除數÷除數=商。a除以b即a÷b。a÷b也可以說b除a。

一些簡單的整數整除性質

(1)a|1,則a=±1
(2)若a|b且b|a,則a=±b
(3)任何不等於零的數整除0
(4)若a|b且b|c,則a|c
(5)對任意整數m,n,若b|g且b|h,則可得出b|(mg+nh)
(6)若b|g,則存在g₁,使得g可以表示爲g=bg₁
若b|h,則存在h₁,使得h可以表示爲h=b
h₁
所以mg+nh=mbg₁+nbh₁=b*(mg₁+nh₁),得出b整除mg+nh
(下面證明歐幾里得會用到)

帶餘除法

對給定的任意一個正整數n和任意非負整數a,若用n除a,得到整數商q和整數餘數r,則滿足以下關係式。
a=qn+r,0≤r<n;(q是小於等於a|b的最大整數)
注:對於任意給定的任意a和正數n,總可以找到滿足上述關係的q和r。在數軸上表示數時,a一定會落在軸上的某處。餘數r通常稱爲剩餘數。

二、歐幾里得算法

歐幾里得算法可以簡單的求出兩個正整數的最大公因子
注:一個簡單的定義:兩個整數是互素的,當且僅當它們只有一個正整數公因子1。在看完下面的內容後,其實就是gcd(a,b)=1。

最大公因子

對於整數a,b,m,若滿足a=mb,則稱非零整數b是a的一個因子。我們用gcd(a,b)來表示a和b的最大公因子。a和b的最大公因子是能同時整除a和b的最大整數。另外,定義gcd(0,0)=0。
更正式的描述是,正整數c稱爲a和b的最大公因子,如果:
(1)c是a和b的因子
(2)a、b的因子都是c的因子
另一個等效的定義是:gcd(a,b)=max{k,滿足k|a且k|b}
注1:因爲要求最大公因子必須是正數,所以有gcd(a,b)=gcd(-a,-b)=gcd(-a,b)=gcd(a,-b)=gcd(|a|,|b|)
注2:因爲0可以被所有非零整數整除,所以gcd(a,0)=|a|

求最大公因子

歐幾里得算法利用了gcd(a,b)=gcd(b,r).其中a÷b=q……r。那麼,當r=0時,gcd(b,0)=|b|就求出了最大公因子。
那麼,我們先舉出兩個例子,然後再來證明,爲什麼gcd(a,b)=gcd(b,r).
例1:求9和12的最大公因子
gcd(a,b)=gcd(b,r) 9÷12=0……9 gcd(9,12)=gcd(12,9)
gcd(a,b)=gcd(b,r) 12÷9=1……3 gcd(12,9)=gcd(9,3)
gcd(a,b)=gcd(b,r) 9÷3=0……0 gcd(9,3)=gcd(3,0)
而gcd(3,0)=3 所以9和12的最大公因子是3
例2:這次我們來算大一點的數,求1314和520的最大公因子
1314÷520=2…274 gcd(1314,520)=gcd(520,274)
520÷274=1……246 gcd(520,274)=gcd(274,246)
274÷246=1……28 gcd(274,246)=gcd(246,28)
246÷28=8……22 gcd(246,28)=gcd(28,22)
28÷22=1……6 gcd(28,22)=gcd(22,6)
22÷6=3……4 gcd(22,6)=gcd(6,4)
6÷4=1……2 gcd(6,4)=gcd(4,2)
4÷2=2……0 gcd(4,2)=gcd(2,0)
而gcd(2,0)=2 所以1314和520的最大公因子是2

gcd(a,b)=gcd(b,r)的證明

1)我們要求整數a和b的最大公因子d;因爲上文我們說gcd(a,b)=gcd(|a|,|b|)且ab的順序並不影響,所以我們不妨設a≧b>0
2)使用帶餘除法,易得b|a可以表示爲:a=q₁b+r₁, 0≦r₁<b
3)1.若r₁=0,那麼gcd(a,b)=gcd(b,r₁)=gcd(b,0)=|b|=b
2.若r₁≠0,d|r₁(因爲d|a且d|b,所以d|a-q₁b,即d|r₁)
不妨設b和r₁的任意公因子爲c,易得c|q₁b+r₁,即c|a,又c|b,所以c是a和b的公因子,又因爲d是a和b的最大公因子,所以c≦d,所以d是b和r₁的最大公因子得證,即gcd(a,b)=gcd(b,r)

.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章