title | tags | ||||
---|---|---|---|---|---|
05. 模运算基础 |
|
这一讲,我们将探讨模运算(Modular Arithmetic),我们在密码学领域会经常用到。
取模运算(modulo)是一种整数运算,它通过对一个整数进行欧几里得除法获得余数,将结果限定在一个固定的范围内。
我们通常使用符号
先举几个简单的例子:
我们可以用python实现取模运算:
def mod(a, b):
remainder = a % b
if remainder < 0:
# 调整余数确保非负
remainder += abs(b)
return remainder
a = 17
b = 5
remainder = mod(a, b)
print(f'{a} mod {b} = {remainder}')
# 17 mod 5 = 2
a = 25
b = 7
remainder = mod(a, b)
print(f'{a} mod {b} = {remainder}')
# 25 mod 7 = 4
a = 69
b = 23
remainder = mod(a, b)
print(f'{a} mod {b} = {remainder}')
# 69 mod 23 = 0
我们使用的24小时计时法也是取模运算的应用。比如当前是12点,20小时过后是不是32点,而是
同余是一种关系,在密码学中有广泛应用。在给定模数
比如在模数
-
反身性:在任何模 n 下,整数
$a$ 与自己本身同余。可以写为$a \equiv a \pmod{n}$ 。 -
对称性:如果在模 n 下
$a$ 与$b$ 同余,那么$b$ 与$a$ 也同余。可以写为:如果$a \equiv b \pmod{n}$ ,那么$b \equiv a \pmod{n}$ 成立。举个例子,$4 \equiv 7 \pmod{3}$ ,同时$7 \equiv 4 \pmod{3}$ , 它们除以3的余数都是1。 -
传递性:如果
$a$ 与$b$ 同余且$b$ 与$c$ 同余,那么$a$ 与$c$ 也同余。可以写为:如果$a \equiv b \pmod{n}$ 且$b \equiv c \pmod{n}$ ,那么有$a \equiv c \pmod{n}$ 。举个例子,$4 \equiv 7 \pmod{3}$ 且$7 \equiv 10 \pmod{3}$ , 那么有$4 \equiv 10 \pmod{3}$ 。
这三个性质都很好证明,大家可以试着写一下。提示:用欧几里得除法将
我们用符号
任何整数
以24小时计时法为例,任何时间都会落在
我们会在之后的教程中更系统的介绍剩余类,现在大家只要有个概念就可以。
-
平移:对于任何整数
$k$ ,如果$a \equiv b \pmod{n}$ ,那么$a+k \equiv b+k \pmod{n}$ 。当$k < 0$ 时,它的效果就是减法。例子:
$4 \equiv 7 \pmod{3}$ ,两边同时加 4,我们得到$8 \equiv 11 \pmod{3}$ ,仍然成立。 -
缩放:对于任何整数
$k$ ,如果$a \equiv b \pmod{n}$ ,那么$a \cdot k \equiv b \cdot k \pmod{n}$ 。例子:
$4 \equiv 7 \pmod{3}$ ,两边同时乘 4,我们得到$16 \equiv 28 \pmod{3}$ ,仍然成立。 -
加法:如果
$a_1 \equiv a_2 \pmod{n}$ 且$b_1 \equiv b_2 \pmod{n}$ ,那么有$a_1 + b_1 \equiv a_2 + b_2 \pmod{n}$ 。例子:
$4 \equiv 7 \pmod{3}$ ,且$2 \equiv 5 \pmod{3}$ ,我们将两边相加,得到$6 \equiv 12 \pmod{3}$ ,仍然成立。 -
乘法:如果
$a_1 \equiv a_2 \pmod{n}$ 且$b_1 \equiv b_2 \pmod{n}$ ,那么有$a_1 b_1 \equiv a_2 b_2 \pmod{n}$ 。例子:
$4 \equiv 7 \pmod{3}$ ,且$2 \equiv 5 \pmod{3}$ ,我们将两边相乘,得到$8 \equiv 35 \pmod{3}$ ,仍然成立。 -
如果
$d=\gcd(k,n)$ ,且$k \cdot a \equiv k \cdot b \pmod{n}$ ,那么有$a \equiv b \pmod{n/d}$ ,即$a$ 和$b$ 在模$n/d$ 下同余。例子:
$20 \equiv 2 \pmod{6}$ ,且$\gcd(2, 6) = 2$ ,我们将两边和模同除以$2$ ,得到$10 \equiv 1 \pmod{3}$ ,仍然成立。 -
如果整数
$k$ 和$n$ 互质,即$\gcd(k,n) = 1$ ,且$k \cdot a \equiv k \cdot b \pmod{n}$ ,那么有$a \equiv b \pmod{n}$ 。例子:已知
$8 \equiv 14 \pmod{3}$ ,且$\gcd(2, 3) = 1$ ,我们将等式两边同除以$2$ ,得到$4 \equiv 7 \pmod{3}$ ,仍然成立。
在数论中,若整数
那么如何找到
# 判断ints中的数是否是p的二次剩余,打印出其最小的模p平方根
p = 29
ints = [14, 6. 11]
qr = [a for a in range(p) if pow(a, 2, p) in ints]
print(min(qr))
-
关于模
$n$ 的所有二次剩余注意到
$x^2\mod n\equiv (n-x)^2\mod n$ ,所以关于模$n$ 的所有二次剩余不可能超过$n/2-1$ ,因为对称。 -
关于
$n$ 为质数的情况,记$n$ 为$p$ 若 p=2 ,则所有的整数都是它的二次剩余。
若 p 为奇质数,p 的二次剩余共有
$(p+1)/2$ ,剩余的$(p-1)/2$ 是二次非剩余
二次剩余的性质:
- 两个二次剩余的乘积仍然是二次剩余。
- 二次非剩余乘以二次非剩余的结果是二次剩余。
- 二次剩余乘以二次非剩余的结果是二次非剩余
勒让德符号(Legendre symbol):
欧拉判别准则:设
这一讲,我们介绍了取模运算的定义,同余,基础模运算以及二次剩余。模运算看起来很陌生,但其实它在生活中无处不在,只是你没有发觉而已。你能说出几个模运算在生活中的应用呢?