算法导论-第31章-数论算法

本章将处理大整数。“大输入”通常指包含“大整数”的输入,而不是包含“很多整数“的输入。因此,我们利用输入所需的位数来度量输入的大小,而不仅仅是输入中整数的数目。

给定 k k k 个整数输入 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an,如果算法可以在关于 log ⁡ a 1 , log ⁡ a 2 , ⋯   , log ⁡ a n \log a_1,\log a_2, \cdots, \log a_n loga1,loga2,,logan 的多项式时间内完成,即算法在关于二进制编码后的输入长度的多项式时间内完成,则称该算法为多项式时间算法。 (不是很懂🤣)

31.1 基础数论概念

整数集 Z = { ⋯   , − 2 , − 1 , 0 , 1 , 2 , ⋯   } Z=\{\cdots, -2, -1, 0, 1, 2, \cdots\} Z={,2,1,0,1,2,}

自然数集 N = { 0 , 1 , 2 , ⋯   } N=\{0, 1, 2, \cdots\} N={0,1,2,}

整除性与约数

**符号 d ∣ a d|a da (读作” d d d 整除 a a a“)的含义是,存在某个整数 k k k,使得 ∗ ∗ a = k d **a = kd a=kd

任何整数均可整除0。

如果 d ∣ a d|a da d ≥ 0 d \ge 0 d0,则称 d d d a a a约数

不失一般性,规定约数为非负数,非零整数 a a a 的约数至少为1,且不大于 ∣ a ∣ |a| a。例如,24的约数是1,2,3,4,6,8,12,24。

任何正整数 a a a 均可被平凡数1和其自身 a a a 整除。整数 a a a 的非平凡约数称为 a a a 的因子。例如,20的因子是2, 4, 5, 10。

素数与合数

如果一个整数 a > 1 a \gt 1 a>1 且只能被平凡约数1和它自身所整除,则这个数是素数

前20个素数排列如下:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71.

如果一个整数 a > 1 a \gt 1 a>1 且不是素数,则这个数是合数

0, 1和所有负整数都既不是素数也不是合数

除法定理、余数和模

除法定理:对于任何整数 a a a 和任何正整数 n n n,存在唯一整数 q q q r r r,满足 0 ≤ r < n 0 \le r \lt n 0r<n a = q n + r a = qn+r a=qn+r

q = ⌊ a / n ⌋ q = \lfloor a/n \rfloor q=a/n 为除法的商,值 r = a   m o d   n r = a\ mod\ n r=a mod n 为除法的余数。 n ∣ a n|a na 当且仅当 a   m o d   n = 0 a\ mod\ n = 0 a mod n=0

n n n 的等价类: [ a ] n = { a + k n ∣ k ∈ Z } [a]_n=\{a+kn|k \in Z\} [a]n={a+knkZ}

  • a ∈ [ b ] n a\in [b]_n a[b]n,则 a ≡ b ( m o d   n ) a \equiv b(mod\ n) ab(mod n)

image-20230701164329408

公约数与最大公约数

a , b a,b a,b 不全为零的两个整数,则最大公约数 g c d ( a , b ) gcd(a,b) gcd(a,b) { a x + b y ∣ x , y ∈ Z } \{ax+by|x,y \in Z\} {ax+byx,yZ} 中最小的正整数。

  • 对所有整数 a a a b b b,如果 d ∣ a d|a da d ∣ b d|b db,则 d ∣ g c d ( a , b ) d|gcd(a,b) dgcd(a,b)
  • 对所有整数 a a a b b b,和非负整数 n n n,有 g c d ( a n , b n ) = n g c d ( a , b ) gcd(an, bn)= ngcd(a,b) gcd(an,bn)=ngcd(a,b)
  • 对所有正整数 n n n a a a b b b,如果 n ∣ a b n|ab nab g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1,则 n ∣ b n|b nb

互素数和素数唯一性分解定理

如果 g c d ( a , b ) = 1 gcd(a, b)=1 gcd(a,b)=1,称 a a a b b b 为互素数。

∀ a , b , p ∈ Z \forall a,b,p \in Z a,b,pZ,如果 g c d ( a , p ) = 1 gcd(a, p)= 1 gcd(a,p)=1 g c d ( b , p ) = 1 gcd(b, p) = 1 gcd(b,p)=1,则 g c d ( a b , p ) = 1 gcd(ab, p) = 1 gcd(ab,p)=1

唯一分解定理:一个合数能被唯一写成形式 a = p 1 e 1 p 2 e 2 ⋯ p r e r a = p_{1}^{e_1}p_{2}^{e_2} \cdots p_{r}^{e_r} a=p1e1p2e2prer,这里 p i p_i pi 是素数, p 1 < p 2 < ⋯ < p r p_1 \lt p_2 \lt \cdots \lt p_r p1<p2<<pr e i e_i ei 是正整数。例如, 6000 = 2 4 × 3 × 5 3 6000=2^4 \times 3 \times 5^3 6000=24×3×53

31.2 最大公约数

一种直观解GCD

a = p 1 e 1 p 2 e 2 ⋯ p r e r a = p_{1}^{e_1}p_{2}^{e_2} \cdots p_{r}^{e_r} a=p1e1p2e2prer b = p 1 f 1 p 2 f 2 ⋯ p r f r b = p_{1}^{f_1}p_{2}^{f_2} \cdots p_{r}^{f_r} b=p1f1p2f2prfr ⇒ \Rightarrow g c d ( a , b ) = p 1 m i n { e 1 , f 1 } p 2 m i n { e 2 , f 2 } ⋯ p r m i n { e r , f r } gcd(a,b) = p_{1}^{min\{e_1,f_1\}} p_{2}^{min\{e_2,f_2\}} \cdots p_{r}^{min\{e_r,f_r\}} gcd(a,b)=p1min{e1,f1}p2min{e2,f2}prmin{er,fr}

注:这种解法需要整数的素因子分解,而素因子分解是一个很难的问题(NP-hard)。

Euclid‘s Algorithm

EUCLID(a, b)
    if b == 0
        return a
    else 
        return EUCLID(b, a mod b)

g c d ( 30 , 21 ) gcd(30, 21) gcd(30,21) 为例,EUCLID(30, 21) = EUCLID(21, 9) = EUCLID(9, 3) = EUCLID(3, 0) = 3

Euclid‘s Algorithm的递归调用次数为 O ( log ⁡ b ) \Omicron(\log b) O(logb)

Extended-Euclid‘s Algorithm

Extended-Euclid

31.3 求解线性模方程

x x x 满足下面的模方程 a x ≡ b ( m o d   n ) ax \equiv b (mod \ n) axb(mod n),其中 a > 0 , n > 0 a \gt 0,n \gt 0 a>0,n>0

当且仅当 g c d ( a , n ) ∣ b gcd(a, n) | b gcd(a,n)b 时,方程 a x ≡ b ( m o d   n ) ax \equiv b (mod \ n) axb(mod n) 有解。

例题,判断 4 x ≡ 2 ( m o d   6 ) 4x \equiv 2(mod \ 6) 4x2(mod 6) 4 x ≡ 3 ( m o d   6 ) 4x \equiv 3 (mod \ 6) 4x3(mod 6) 有无解。

  • 因为 g c d ( 4 , 6 ) ∣ 2 gcd(4, 6) | 2 gcd(4,6)∣2,所以 4 x ≡ 2 ( m o d   6 ) 4x \equiv 2(mod \ 6) 4x2(mod 6) 有解。
  • 因为 g c d ( 4 , 6 ) 不整除 3 gcd(4, 6)不整除3 gcd(4,6)不整除3,所以 4 x ≡ 3 ( m o d   6 ) 4x \equiv 3(mod \ 6) 4x3(mod 6) 无解。

d = g c d ( a , n ) d = gcd(a, n) d=gcd(a,n) d = a x ′ + n y ′ d = ax'+ny' d=ax+ny,对某个整数 x ′ x' x y ′ y' y。如果 d ∣ b d|b db,则有特解 x 0 = x ′ ( b / d ) m o d   n x_0 = x'(b/d) mod \ n x0=x(b/d)mod n

x 0 x_0 x0 a x ≡ b ( m o d   n ) ax \equiv b(mod \ n) axb(mod n) 的一个解,则有 d d d 个不同的解: x i = x 0 + i ( n / d ) , i = 0 , 1 , 2 , ⋯   , d − 1 x_i = x_0 + i(n/d),i = 0 ,1, 2, \cdots,d-1 xi=x0+i(n/d),i=0,1,2,,d1

方程 a x ≡ b ( m o d   n ) ax \equiv b (mod \ n) axb(mod n) 要么对模 n n n g c d ( a , n ) gcd(a, n) gcd(a,n) 个不同的解,要么无解。

例题,求 14 x ≡ 30 ( m o d   100 ) 14x \equiv 30(mod \ 100) 14x30(mod 100)

解:调用 E x t e n d e d E u c l i d ( 14 , 100 ) = ( d , x ′ , y ′ ) = ( 2 , − 7 , 1 ) ExtendedEuclid(14,100)=(d,x',y')=(2,-7,1) ExtendedEuclid(14,100)=(d,x,y)=(2,7,1)

∵2|30

∴特解 x 0 = − 7 × 30 / 2 ( m o d 100 ) = 95 x_0=-7×30/2(mod 100)=95 x0=7×30/2(mod100)=95

调用求全部解算法:二个解95,45

x 0 = 95 + 0 × 100 / 2 = 95 x_0=95+0×100/2=95 x0=95+0×100/2=95

x 1 = 95 + 1 × 100 / 2 = 145 = 45 ( m o d 100 ) x_1=95+1×100/2=145=45(mod 100) x1=95+1×100/2=145=45(mod100)

31.4 中国剩余定理

模逆: a a − 1 ≡ 1 ( m o d   n ) aa^{-1} \equiv 1(mod \ n) aa11(mod n)

定义 m i = n / n i m_i = n / n_i mi=n/ni,于是可得 m i = n 1 n 2 ⋯ n i − 1 n i + 1 ⋯ n k m_i = n_1n_2\cdots n_{i-1}n_{i+1} \cdots n_k mi=n1n2ni1ni+1nk。接着定义 c i = m i ( m i − 1 m o d   n i ) c_i=m_i(m_i^{-1} mod \ n_i) ci=mi(mi1mod ni)
a ≡ ( a 1 c 1 + a 2 c 2 + ⋯ + a k c k ) ( m o d   n ) a \equiv(a_1c_1+a_2c_2+\cdots+a_kc_k)(mod \ n) a(a1c1+a2c2++akck)(mod n)
例题,已知 a ≡ 2 ( m o d   5 ) , a ≡ 3 ( m o d   13 ) a \equiv 2(mod \ 5),a \equiv 3(mod \ 13) a2(mod 5),a3(mod 13)

解:
a 1 = 2 , a 2 = 3 a_1 = 2, a_2 = 3 a1=2,a2=3

n 1 = 5 , n 2 = 13 n_1 = 5, n_2 = 13 n1=5,n2=13

m 1 = n 2 = 13 , m 2 = n 1 = 5 m_1 = n_2 = 13, m_2 = n_1 = 5 m1=n2=13,m2=n1=5

m 1 m 1 − 1 = 1 ( m o d   5 ) , m 1 − 1 = 2 m_1m_1^{-1} = 1(mod \ 5), m_1^{-1}= 2 m1m11=1(mod 5),m11=2

m 2 m 2 − 1 = 1 ( m o d   13 ) , m 2 − 1 = 8 m_2m_2^{-1} = 1(mod \ 13), m_2^{-1} = 8 m2m21=1(mod 13),m21=8

c 1 = 13 ( 2   m o d   5 ) = 26 c_1 = 13(2 \ mod \ 5) = 26 c1=13(2 mod 5)=26

c 2 = 5 ( 8   m o d   13 ) = 40 c_2 = 5(8 \ mod \ 13) = 40 c2=5(8 mod 13)=40

a ≡ 2 ⋅ 26 + 3 ⋅ 40 ( m o d   65 ) ≡ ( 52 + 120 ) ( m o d   65 ) ≡ 42 ( m o d   65 ) a \equiv 2 \cdot 26+3 \cdot 40(mod \ 65) \\ \equiv (52 + 120)(mod \ 65) \\ \equiv 42(mod \ 65) a226+340(mod 65)(52+120)(mod 65)42(mod 65)

例题,已知 x ≡ 4 ( m o d   5 ) x \equiv 4(mod \ 5) x4(mod 5) x ≡ 5 ( m o d   11 ) x \equiv 5(mod \ 11) x5(mod 11)

解:
a 1 = 4 , a 2 = 5 a_1 = 4, a_2 = 5 a1=4,a2=5

n 1 = 5 , n 2 = 11 n_1 = 5, n_2 = 11 n1=5,n2=11

m 1 = n 2 = 11 m_1 = n_2 = 11 m1=n2=11

m 2 = n 1 = 5 m_2 = n_1 = 5 m2=n1=5

c 1 = m 1 ( m 1 − 1   m o d   n 1 ) = 11 ( 1 1 − 1   m o d   5 ) , 其中 11 ⋅ 1 1 − 1 = 1 ( m o d   5 ) , 得 1 1 − 1 = 1 = 11 ( 1   m o d   5 ) = 11 c_1 = m_1(m_1^{-1} \ mod \ n_1) \\ =11(11^{-1} \ mod \ 5),其中 11 \cdot 11^{-1}=1(mod \ 5),得 11^{-1}=1 \\ =11(1 \ mod \ 5)\\ =11 c1=m1(m11 mod n1)=11(111 mod 5),其中11111=1(mod 5),111=1=11(1 mod 5)=11

c 2 = m 2 ( m 2 − 1   m o d   n 2 ) = 5 ( 5 − 1   m o d   11 ) , 其中 5 ⋅ 5 − 1 = 1 ( m o d   11 ) , 得 5 − 1 = 9 = 5 ( 9   m o d   11 ) = 45 c_2 = m_2(m_2^{-1} \ mod \ n_2) \\ =5(5^{-1} \ mod \ 11),其中 5 \cdot 5^{-1}=1(mod \ 11),得 5^{-1}=9 \\ =5(9 \ mod \ 11)\\ =45 c2=m2(m21 mod n2)=5(51 mod 11),其中551=1(mod 11),51=9=5(9 mod 11)=45

a = ( a 1 c 1 + a 2 c 2 ) ( m o d   n ) , 其中 n = n 1 n 2 = 5 × 11 = 55 = ( 4 × 11 + 5 × 45 ) ( m o d   55 ) = 269   m o d   55 = 49 a = (a_1c_1+a_2c_2)(mod \ n),其中 n=n_1n_2=5 \times 11=55 \\ =(4 \times 11 + 5 \times 45) (mod \ 55) \\ =269 \ mod \ 55 \\ =49 a=(a1c1+a2c2)(mod n),其中n=n1n2=5×11=55=(4×11+5×45)(mod 55)=269 mod 55=49

关键在于求模逆。其他套公式。

31.5 RSA

构造过程:

  1. 随机选择两个大素数 p p p q q q p < > q p<>q p<>q
  2. 计算 n = p q n=pq n=pq
  3. 选择小的奇整数 e e e,使得 e e e ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p1)(q1) 互素;
  4. 计算 e e e ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p1)(q1) 的逆 d d d,即 e d = 1 ( m o d ( p − 1 ) ( q − 1 ) ) ed=1(mod (p-1)(q-1)) ed=1(mod(p1)(q1))
  5. 公布 e , n e,n e,n为RSA的公钥;
  6. 保存 d , p , q d,p,q d,p,q 为RSA的私钥。

加解密过程:

  • 加密: P ( M ) = M e   m o d   n P(M)=M^e \ mod \ n P(M)=Me mod n; (=C)
  • 解密: S ( C ) = C d   m o d   n S(C)=C^d \ mod \ n S(C)=Cd mod n;

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,其正确性基础基于数论中两个关键性质:质因数分解困难性和模幂运算的可逆性。

  1. 质因数分解困难性:RSA的安全性依赖于大整数的质因数分解问题的困难性。给定一个大的合数,将其分解为质数的乘积是一个计算上非常困难的问题,特别是当质数很大时。RSA利用了这一困难性,通过使用大素数进行加密和解密,使得破解者难以找到私钥(包含了质因数)。

  2. 模幂运算的可逆性:RSA算法中使用了模幂运算,即对一个数进行指数幂运算后再取模的操作。模幂运算具有可逆性,即给定模数、底数和指数,可以通过模幂运算计算出唯一的结果。在RSA中,公钥加密和私钥解密过程都涉及到模幂运算,确保了正确的加密和解密操作。

31.6 素数判定

简单素数测试算法

image-20230701212848094

伪素数测试算法

image-20230701212927312

image-20230701212955610

image-20230701213019805

31.7 MR算法的改进措施和算法复杂性

  • 措施1:随机选择若干个基,以减少计算量
  • 措施2:在计算 a n − 1   m o d   n a^{n-1} \ mod \ n an1 mod n 过程中,加入合数证人(Witness)的查找

n n n β − b i t \beta-bit βbit 整数,算法需要 O ( s β ) \Omicron(s\beta) O(sβ) 算数运算, O ( β 3 ) \Omicron(\beta^3) O(β3) 位运算。

posted @ 2023-09-22 11:57  gengduc  阅读(32)  评论(0编辑  收藏  举报  来源