今天此篇為把之前新學到的定理做統整,內容包含模運算、歐幾里得算法、擴展歐幾里得算法、費馬小定理、二次剩餘、中國剩餘定理
---------------
表示為𝑎 𝑚𝑜𝑑 𝑛 ,𝑎代表被取模的數,𝑛是模數,運算結果為𝑎除以𝑛的餘數
e.g. 18 mod 4 = 2 因為18除以4的餘數為2
同餘關係
如果𝑎, 𝑏 兩數除以同一個數𝑛,餘數相同,且兩數的差值𝑎 − 𝑏為 𝑛 的整數倍,就可以說𝑎跟𝑏在模𝑛下的時候同餘
並用 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑛) 表示
e.g. -8 ≡ 7 (𝑚𝑜𝑑 5) 、 5 ≡ 7 (𝑚𝑜𝑑 2)
運算定律
𝑎≡𝑏 (𝑚𝑜𝑑 𝑛) , 𝑝≡𝑞 (𝑚𝑜𝑑 𝑛), 𝑐為任何正整數
𝑎 + 𝑐 ≡ 𝑏 + 𝑐 (𝑚𝑜𝑑 𝑛)
𝑎 − 𝑐 ≡ 𝑏 − 𝑐 (𝑚𝑜𝑑 𝑛)
𝑎 ∙ 𝑐 ≡ 𝑏 ∙ 𝑐 (𝑚𝑜𝑑 𝑛)
𝑎^𝑐 ≡ 𝑏^𝑐 (𝑚𝑜𝑑 𝑛)
𝑎 + 𝑝 ≡ 𝑏 + 𝑞 (𝑚𝑜𝑑 𝑛)
𝑎 ∙ 𝑝 ≡ 𝑏 ∙ 𝑞 (𝑚𝑜𝑑 𝑛)
b為a的模反元素
Fermat's little theorem(限定模數要為質數,在此模數 = p)
b = a^(p-2) % p
Extended Euclidean algorithm
設𝑒𝑥𝑔𝑐𝑑(𝑎, 𝑛)為擴展歐幾里得算法的函數,可得
𝑎𝑥+𝑛𝑦=𝑔 , 𝑔=𝑔𝑐𝑑(𝑎, 𝑛)(最大公因數)
python Crypto.Util.number函式庫中的inverse
from Crypto.Util.number import inverse
b = inverse(a, n)
---------------
以下為code實現
while(b != 0):
temp = a % b
a = b
b = temp
print(a)
import math
print(math.gcd(a, b))
---------------
以下為code實現
from egcd import egcd
print(egcd(a,b))
---------------
假如a是一個整數,p是一個質數,那麼a^p - a是p的倍數,可以表示為
如果a不是p的倍數,這個定理也可以寫成
根據上面第二點設a = 2, p = 13,(2^12)^8可以寫成
所以餘數為3
完整如下 : (來源 : https://zh.wikipedia.org/zh-tw/%E8%B4%B9%E9%A9%AC%E5%B0%8F%E5%AE%9A%E7%90%86#%E5%8E%86%E5%8F%B2)
---------------
1^1%10 = 1, 2^2%10 = 4, 3^2%10 = 9, 4^2%10 = 6, 5^2%10 = 5...
---------------
e.g. a = 5 // 2, a = 2, 由此例子可知" // " 意思為除後取整數商的部分
---------------
今天把之前文章中提到的東西整理再一起惹(水了一天w),不過解的題目還不夠多,經驗還不夠,所以沒有甚麼解題技巧,之後解了學到新東東會再回來更新筆記!
---------------