《算法导论》第三版第31章 数论算法 练习&思考题 个人答案

31.8节和以后内容由于和所学专业相差过远,暂时停更。。。

31.1 基础数论概念

31.1-1

证明:
c m o d    a = ( a + b ) m o d    a = b m o d    a = b \begin{aligned} c\mod a & =(a+b)\mod a \\ &=b\mod a \\ &=b \end{aligned} cmoda=(a+b)moda=bmoda=b

31.1-2

证明: [ ( p 1 p 2 . . . p i . . . p k ) + 1 ] m o d    p i = [ ( p 1 p 2 . . . p i . . . p k ) m o d    p i ] + [ 1 m o d    p i ] = 1 [(p_1p_2...p_i...p_k)+1]\mod{p_i}=[(p_1p_2...p_i...p_k)\mod{p_i}]+[1\mod{p_i}]=1 [(p1p2...pi...pk)+1]modpi=[(p1p2...pi...pk)modpi]+[1modpi]=1
所以其中任意素数都不能整除该数,所以该数仍是个素数,所以有无穷多个素数。

31.1-3

证明:设 b = m a b=ma b=ma c = n b c=nb c=nb,则 c = m n a c=mna c=mna,所以 a ∣ c a\mid c ac

31.1-4

证明:如果k不是1,则k不能整除p,得出结论;如果k是1,则直接得出结论。

31.1-5

证明:设 a b = n k ab=nk ab=nk,则 b = n k a b=\frac{nk}{a} b=ank。因为 gcd ⁡ ( a , n ) = 1 \gcd(a,n)=1 gcd(a,n)=1,所以 n a \frac{n}{a} an不是整数(只要a不是1,如果是的话就易证了)。又因为b是整数,所以 k a \frac{k}{a} ak是一个整数,所以 n ∣ b n\mid b nb

31.1-6

证明:
( a + b ) p ≡ a p + ( p 1 ) a p − 1 b 1 + ⋯ + ( p p − 1 ) a 1 b p − 1 + b p ( m o d    p ) ≡ a p + 0 + ⋯ + 0 + b p ( m o d    p ) ≡ a p + b p ( m o d    p ) \begin{array}{rlll} (a + b) ^ p & \equiv & a^p + \binom{p}{1} a^{p - 1}b^{1} + \cdots + \binom{p}{p - 1} a^{1}b^{p - 1} + b^p & (\mod p) \\ & \equiv & a^p + 0 + \cdots + 0 + b^p & (\mod p) \\ & \equiv & a^p + b^p & (\mod p) \end{array} (a+b)pap+(1p)ap1b1++(p1p)a1bp1+bpap+0++0+bpap+bp(modp)(modp)(modp)

31.1-7

证明:假设 x = k b + c x = kb + c x=kb+c,有 ( x m o d    b ) m o d    a = c m o d    a (x \mod b) \mod a = c \mod a (xmodb)moda=cmoda x m o d    a = ( k b + c ) m o d    a = ( k b m o d    a ) + ( c m o d    a ) = c m o d    a x \mod a = (kb + c) \mod a = (kb \mod a) + (c \mod a) = c \mod a xmoda=(kb+c)moda=(kbmoda)+(cmoda)=cmoda

31.1-8

证明:因为 2 β > n 2^\beta > n 2β>n,所以只要验证满足 2 ≤ k < β 2 \le k < \beta 2k<β k k k值,因此验证过程的时间复杂度是 O ( β ) O(\beta) O(β)
对任意非平凡指数 k k k 2 ≤ k < β 2 \le k < \beta 2k<β,使用二分查找找到 a a a,时间复杂度 O ( log ⁡ n ) = O ( log ⁡ 2 β ) = O ( 1 2 log ⁡ 2 β ) = O ( β ) O(\log \sqrt n) = O(\log \sqrt{2^\beta}) = O(\frac 1 2\log 2^\beta) = O(\beta) O(logn )=O(log2β )=O(21log2β)=O(β)。因此,总时间复杂度是 O ( β ) × O ( β ) = O ( β 2 ) O(\beta) \times O(\beta) = O(\beta^2) O(β)×O(β)=O(β2)

31.1-9

证明:
(31.6)略
(31.7)gcd(a,b)是a的约数中能整除b的最大的一个,而a和-a有相同的约数,所以也是-a的约数中能整除b的最大的一个,所以也是gcd(-a,b)。
(31.8)由(31.7)可得。
(31.9)a的最大约数是|a|,而它也能整除0,所以gcd(a,0)=|a|。
(31.10)思路同(31.9)

31.1-10

证明(本题证明思路来自https://blog.csdn.net/z84616995z/article/details/21945197):
定义“ gcd ⁡ ( a , b , c ) \gcd(a,b,c) gcd(a,b,c)”为a,b,c三个数的最大公约数,需证明 gcd ⁡ ( a , gcd ⁡ ( b , c ) ) = gcd ⁡ ( a , b , c ) = gcd ⁡ ( gcd ⁡ ( a , b ) , c ) \gcd(a, \gcd(b, c))=\gcd(a,b,c)=\gcd(\gcd(a, b), c) gcd(a,gcd(b,c))=gcd(a,b,c)=gcd(gcd(a,b),c),而该式前后两部分可由交换律得出,所以只需证明前半部分 gcd ⁡ ( a , gcd ⁡ ( b , c ) ) = gcd ⁡ ( a , b , c ) \gcd(a, \gcd(b, c))=\gcd(a,b,c) gcd(a,gcd(b,c))=gcd(a,b,c),该证明分为两部分。
(1)设 d = gcd ⁡ ( a , gcd ⁡ ( b , c ) ) d=\gcd(a, \gcd(b, c)) d=gcd(a,gcd(b,c)),则 d ∣ a d\mid a da d ∣ gcd ⁡ ( b , c ) d\mid \gcd(b, c) dgcd(b,c),所以 d ∣ a d\mid a da d ∣ b d\mid b db d ∣ c d\mid c dc,所以 d ≤ gcd ⁡ ( a , b , c ) d\leq\gcd(a,b,c) dgcd(a,b,c)
(2)设 d ′ = gcd ⁡ ( a , b , c ) d'=\gcd(a,b,c) d=gcd(a,b,c),则 d ∣ a d\mid a da d ∣ b d\mid b db d ∣ c d\mid c dc,由推论31.3知 d ′ ∣ gcd ⁡ ( b , c ) d'\mid\gcd(b,c) dgcd(b,c)。又因为 d ′ ∣ a d'\mid a da,所以再次使用 d ′ ∣ gcd ⁡ ( a , g c d ( b , c ) ) d'\mid\gcd(a,gcd(b,c)) dgcd(a,gcd(b,c))。因为最大公约数一定是正整数,所以存在正整数 k k k,使得 gcd ⁡ ( a , gcd ⁡ ( b , c ) ) = k d ′ \gcd(a,\gcd(b,c))=kd' gcd(a,gcd(b,c))=kd

31.1-11

证明:反证,假设存在某些数,它们有至少两种分解方法。那么一定有一个最小的数M,它能用至少两种方法表示成质数的乘积:
M = p 1 × p 2 × … × p r = q 1 × q 2 × … × q s M = p_1\times p_2\times … \times p_r = q_1\times q_2\times … \times q_s M=p1×p2××pr=q1×q2××qs
p 1 ≤ p 2 ≤ . . . ≤ p r p_1 \leq p_2 \leq ... \leq p_r p1p2...pr, q 1 ≤ q 2 ≤ . . . ≤ q s q_1 \leq q_2 \leq ... \leq q_s q1q2...qs。显然, p 1 p_1 p1是不等于 q 1 q_1 q1的,不然两边同时约掉它,就得到一个更小的有两种分解方法的数。设 p 1 < q 1 p_1 < q_1 p1<q1,那么用 p 1 p_1 p1替换掉等式最右边中的 q 1 q_1 q1,得到一个比M更小的数 T = p 1 × q 2 × q 3 × . . . × q s T = p_1 \times q_2 \times q_3 \times ... \times q_s T=p1×q2×q3×...×qs。令 M ′ = M − T M' = M - T M=MT,得到 M ′ M' M的两种表达:
M ′ = ( p 1 × p 2 × . . . × p r ) − ( p 1 × q 2 × . . . × q s ) = p 1 × ( p 2 × . . × p r − q 2 × . . . × q s ) M' = (p_1 \times p_2 \times ... \times p_r) - (p_1 \times q_2 \times ... \times q_s) = p_1 \times (p_2 \times .. \times p_r - q_2 \times ... \times q_s) M=(p1×p2×...×pr)(p1×q2×...×qs)=p1×(p2×..×prq2×...×qs)…(1)
M ′ = ( q 1 × q 2 × . . . × q s ) − ( p 1 × q 2 × . . . × q s ) = ( q 1 − p 1 ) × q 2 × . . . × q s M' = (q_1 \times q_2 \times ... \times q_s) - (p_1 \times q_2 \times ... \times q_s) = (q_1 - p_1) \times q_2 \times ... \times q_s M=(q1×q2×...×qs)(p1×q2×...×qs)=(q1p1)×q2×...×qs …(2)
由于 T T T M M M小,因此 M ′ M' M是正整数。从(1)式中可以看到, p 1 p_1 p1 M ′ M' M的一个质因子。注意到 M ′ M' M M M M小,因此它的质因数分解方式应该是唯一的,可知 p 1 p_1 p1也应该出现在表达式(2)中。既然 p 1 p_1 p1比所有的 q q q都要小,因此它不可能恰好是(2)式中的某个 q q q,于是只可能被包含在因子 ( q 1 − p 1 ) (q_1-p_1) (q1p1)里。但这就意味着, ( q 1 − p 1 ) / p 1 (q_1-p_1)/p_1 (q1p1)/p1除得尽,也就是说 q 1 / p 1 − 1 q_1/p_1-1 q1/p11是一个整数,这样 q 1 / p 1 q_1/p_1 q1/p1也必须得是整数。立即看出, p 1 p_1 p1必须也是 q 1 q_1 q1的一个因子,这与 q 1 q_1 q1是质数矛盾了。这说明,最初的假设是错误的。

31.1-12

思路:使用位运算,为短整数左移(补0)至β长度,然后与整数相减,然后逐渐右移并相减得出商和余数。

31.1-13

31.2 最大公约数

31.2-1

31.2-2

解:(29,1,0),过程略。

31.2-3

证明思路:利用定理31.9,可分别证明 gcd ⁡ ( a + k n , n ) = gcd ⁡ ( a , n ) = gcd ⁡ ( a m o d    n , n ) \gcd(a+kn,n)=\gcd(a,n)=\gcd(a\mod n,n) gcd(a+kn,n)=gcd(a,n)=gcd(amodn,n) gcd ⁡ ( a , n ) = gcd ⁡ ( a − k n , n ) = gcd ⁡ ( a m o d    n , n ) \gcd(a,n)=\gcd(a-kn,n)=\gcd(a\mod n,n) gcd(a,n)=gcd(akn,n)=gcd(amodn,n)(假设k为正整数)

31.2-4

解:

EUCLID(a,b)
while b != 0
    k = a
    a = b
    b = k mod b
return a

31.2-5

证明:
b ≥ F k + 1 ≈ ϕ k + 1 / 5 b \ge F_{k + 1} \approx \phi^{k + 1} / \sqrt{5} bFk+1ϕk+1/5
k + 1 < log ⁡ ϕ 5 + log ⁡ ϕ b ≈ 1.67 + log ⁡ ϕ b k + 1 < \log_\phi \sqrt{5} + \log_\phi b \approx 1.67 + \log_\phi b k+1<logϕ5 +logϕb1.67+logϕb
k < 0.67 + log ⁡ ϕ b < 1 + log ⁡ ϕ b . k < 0.67 + \log_\phi b < 1 + \log_\phi b. k<0.67+logϕb<1+logϕb.
因为 d ⋅ a m o d    d ⋅ b = d ⋅ ( a m o d    b ) d \cdot a \mod d \cdot b = d \cdot (a \mod b) damoddb=d(amodb) gcd ⁡ ( d ⋅ a , d ⋅ b ) \gcd(d \cdot a, d \cdot b) gcd(da,db) gcd ⁡ ( a , b ) \gcd(a, b) gcd(a,b)有相同的迭代次数,所以可以令 b ′ = b / gcd ⁡ ( a , b ) b' = b / \gcd(a, b) b=b/gcd(a,b),不等式 k < 1 + log ⁡ ϕ ( b ′ ) = 1 + log ⁡ ϕ ( b / gcd ⁡ ( a , b ) ) k < 1 + \log_\phi(b') = 1 + \log_\phi(b / \gcd(a, b)) k<1+logϕ(b)=1+logϕ(b/gcd(a,b))就成立。

31.2-6

解:如果 k k k是奇数,得到 ( 1 , − F k − 2 , F k − 1 ) (1, -F_{k-2}, F_{k - 1}) (1,Fk2,Fk1);如果 k k k是偶数,得到 ( 1 , F k − 2 , − F k − 1 ) (1, F_{k-2}, -F_{k - 1}) (1,Fk2,Fk1)。证明略。

31.2-7

证明(过程来自https://blog.csdn.net/z84616995z/article/details/21945197):
下面需要证明如下等式:gcd(a0,a1,…,an)=gcd(ai,gcd(a1,.a(i-1),a(i+1)…,an)).
1.设d=gcd(a0,a1,…,an) 则d|ai(i=0,1,…n),d是ai的公约数,所以d|aj(j=0,1…n且(j≠i))且d|ai
所以d|gcd(a0,a1…a(i-1),a(i+1)…an),由于且d|ai ,
所以d|gcd(ai,gcd(a1,.a(i-1),a(i+1)…,an)),由此可知:gcd(ai,gcd(a1,.a(i-1),a(i+1)…,an))≥d=gcd(a0,a1,…,an) …(1)
2.设d‘=gcd(ai,gcd(a1,.a(i-1),a(i+1)…,an))则d’|ai,d’|gcd(a1,.a(i-1),a(i+1)…,an)=>d’|ai(i=0,1,…n)=>d’是ai的公约数
所以的d’≤d,gcd(ai,gcd(a1,.a(i1),a(i+1)…,an))≤gcd(a0,a1,…,an)…(2)
由(1)和(2)知gcd(ai,gcd(a1,.a(i-1),a(i+1)…,an))=d=gcd(a0,a1,…,an) 其中i=0,1…n 也就是说a0,a1…an的最大公约数就是等于其中任意一个ai与剩下的gcd(a1,.a(i-1),a(i+1)…,an)的最大公约数。
解:
假设
gcd ⁡ ( a 0 , gcd ⁡ ( a 1 , a 2 , ⋯   , a n ) ) = a 0 ⋅ x + gcd ⁡ ( a 1 , a 2 , ⋯   , a n ) ⋅ y \gcd(a_0, \gcd(a_1, a_2, \cdots, a_n)) = a_0 \cdot x + \gcd(a_1, a_2, \cdots, a_n) \cdot y gcd(a0,gcd(a1,a2,,an))=a0x+gcd(a1,a2,,an)y

gcd ⁡ ( a 1 , gcd ⁡ ( a 2 , a 3 , ⋯   , a n ) ) = a 1 ⋅ x ′ + gcd ⁡ ( a 2 , a 3 , ⋯   , a n ) ⋅ y ′ , \gcd(a_1, \gcd(a_2, a_3, \cdots, a_n)) = a_1 \cdot x' + \gcd(a_2, a_3, \cdots, a_n) \cdot y', gcd(a1,gcd(a2,a3,,an))=a1x+gcd(a2,a3,,an)y,
所以 a 1 a_1 a1的系数是 y ⋅ x ′ y \cdot x' yx

EXTENDED-EUCLID(a, b)
if b == 0
    return (a, 1, 0)
(d, x, y) = EXTENDED-EUCLID(b, a mod b)
return (d, y, x - (a / b) * y)
EXTENDED-EUCLID-MULTIPLE(a)
if a.length == 1
    return (a[0], 1)
g = a[a.length - 1]
xs = [1] * a.length
ys = [0] * a.length
for i = a.length - 2 downto 0
    (g, xs[i], ys[i + 1]) = EXTENDED-EUCLID(a[i], g)
m = 1
for i = 1 to a.length
    m *= ys[i]
    xs[i] *= m
return (g, xs)

31.2-8

解:
两数的乘积等于最大公约数乘最小公倍数。

gcd(a, b)
if b == 0
    return a
return gcd(b, a mod b)
lcm(a, b)
return a / gcd(a, b) * b
lcm-MULTIPLE(a)
l = a[0]
for i = 1 to a.length
    l = lcm(l, a[i])
return l

31.2-9

证明:
假设 n 1 n 2 x + n 3 n 4 y = 1 n_1n_2 x + n_3n_4 y = 1 n1n2x+n3n4y=1,可得 n 1 ( n 2 x ) + n 3 ( n 4 y ) = 1 n_1(n_2 x) + n_3(n_4 y) = 1 n1(n2x)+n3(n4y)=1,因此 n 1 n_1 n1 n 3 n_3 n3互质, n 1 n_1 n1 n 4 n_4 n4 n 2 n_2 n2 n 3 n_3 n3 n 2 n_2 n2 n 4 n_4 n4都互质。又因为 gcd ⁡ ( n 1 n 3 , n 2 n 4 ) = 1 \gcd(n_1n_3, n_2n_4) = 1 gcd(n1n3,n2n4)=1,所以所有对都互质。
一般性:在第一轮中,将元素分成两组,元素数量相等,分别计算两组的乘积,如果两个乘积互质,那么一组中的元素与另一组中的元素互质。在下一次迭代中,对于每个集合,我们将元素划分为两个子集,假设我们有子集 ( s 1 , s 2 ) , ( s 3 , s 4 ) , … {(s_1,s_2),(s_3,s_4),\ldots} (s1,s2),(s3,s4),,然后我们计算 s 1 , s 3 , … {s_1, s_3,\ldots} s1,s3, s 2 , s 4 , … {s_2,s_4,\ldots} s2,s4,的乘积,如果两个结果互质,则所有子集对都是成对互质,类似于第一轮。在每次迭代中,子集中元素的数量是原始集合的一半,因此有 ⌈ lg ⁡ k ⌉ \lceil \lg k \rceil lgk对结果。

31.3 模运算

31.3-1

解:

( Z 4 , + 4 ) (\mathbb Z_4,+_4) (Z4,+4) 0 1 2 3
0 0 1 2 3
1 1 2 3 0
2 2 3 0 1
3 3 0 1 2
( Z 4 , ⋅ 4 ) (\mathbb Z_4,·_4) (Z4,4) 1 2 3 4
1 1 2 3 4
2 2 4 1 3
3 3 1 4 2
4 4 3 2 1

α ( x ) = 2 x − 1 \alpha(x) = 2^{x-1} α(x)=2x1.

31

31.3-2

解:
Z 9 \mathbb Z_9 Z9
⟨ 0 ⟩ = 0 \langle 0 \rangle = { 0 } 0=0
⟨ 1 ⟩ = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 \langle 1 \rangle = { 0, 1, 2, 3, 4, 5, 6, 7, 8 } 1=0,1,2,3,4,5,6,7,8
⟨ 2 ⟩ = 0 , 2 , 4 , 6 , 8 \langle 2 \rangle = { 0, 2, 4, 6, 8 } 2=0,2,4,6,8

Z 13 ∗ \mathbb Z_{13}^* Z13
⟨ 1 ⟩ = 1 \langle 1 \rangle = { 1 } 1=1
⟨ 2 ⟩ = 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 \langle 2 \rangle = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 } 2=1,2,3,4,5,6,7,8,9,10,11,12

31.3-3

证明思路:根据定理的条件和群的定义可证明S‘是一个群,再由子群的定义可证明定理。

31.3-4

证明: ϕ ( p e ) = p e ⋅ ( 1 − 1 p ) = p e − 1 ( p − 1 ) \phi(p^e) = p^e \cdot \left ( 1 - \frac{1}{p} \right ) = p^{e - 1}(p - 1) ϕ(pe)=pe(1p1)=pe1(p1)

31.3-5

证明:对于每一个 a a a n n n,都有唯一的 x x x对应唯一的 y = f ( x ) y=f(x) y=f(x),所以 f ( x ) f(x) f(x)是一个双射函数。所以函数 f : Z n ∗ → Z n ∗ f: \mathbb Z_n^*\rightarrow\mathbb Z_n^* f:ZnZn Z n ∗ \mathbb Z_n^* Zn的一个置换。

31.4 求解模线性方程

31.4-1

解:6,16,26,36,46。

31.4-2

证明:由 a x ≡ a y ( m o d    n ) ax≡ay(\mod n) axay(modn) a x = a y + n k    ⟹    a ( x − y ) = n k    ⟹    n ∣ a ( x − y ) ax=ay+nk\implies a(x-y)=nk\implies n|a(x-y) ax=ay+nka(xy)=nkna(xy) g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1,根据推论31.5得 n ∣ ( x − y )    ⟹    x − y = n k    ⟹    x = y + n k    ⟹    x ≡ y ( m o d    n ) n|(x-y) \implies x-y=nk \implies x=y+nk\implies x≡y(\mod n) n(xy)xy=nkx=y+nkxy(modn)

31.4-3

解:能;假设 x 0 ≥ n / d x_0 \ge n / d x0n/d,方程的最大解为 x 0 + ( d − 1 ) ⋅ ( n / d ) ≥ d ⋅ n / d ≥ n x_0 + (d - 1) \cdot (n / d) \ge d \cdot n / d \ge n x0+(d1)(n/d)dn/dn,这是不可能的,所以 x 0 < n / d x_0 < n / d x0<n/d

31.4-4

证明:

31.5 中国余数定理

31.5-1

解: m 1 = 11 , m 2 = 5. m 1 − 1 = 1 , m 2 − 1 = 9. c 1 = 11 , c 2 = 45. a = ( c 1 ⋅ a 1 + c 2 ⋅ a 2 ) m o d    ( n 1 ⋅ n 2 ) = ( 11 ⋅ 4 + 45 ⋅ 5 ) m o d    55 = 49. \begin{aligned} m_1 & = 11, m_2 = 5. \\ m_1^{-1} & = 1, m_2^{-1} = 9. \\ c_1 & = 11, c_2 = 45. \\ a & = (c_1 \cdot a_1 + c_2 \cdot a_2) \mod (n_1 \cdot n_2) \\ & = (11 \cdot 4 + 45 \cdot 5) \mod 55 = 49. \end{aligned} m1m11c1a=11,m2=5.=1,m21=9.=11,c2=45.=(c1a1+c2a2)mod(n1n2)=(114+455)mod55=49.

31.5-2

解: 10 + 504 i 10 + 504i 10+504i, i ∈ Z i \in \mathbb Z iZ.

31.5-3

证明: gcd ⁡ ( a , n ) = 1 → gcd ⁡ ( a , n i ) = 1. \gcd(a, n) = 1 \rightarrow \gcd(a, n_i) = 1. gcd(a,n)=1gcd(a,ni)=1.

31.5-4

证明:基于 31.28 \text{31.28} 31.28 31.30 \text{31.30} 31.30.

31.6 元素的幂

31.6-1

Z 11 ∗ \mathbb Z_{11}^* Z11 1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10
2 1 4 9 5 3 3 5 9 4 1
3 1 8 5 9 4 7 2 6 3 10
4 1 5 4 3 9 9 3 4 5 1
5 1 10 1 1 1 10 10 10 1 10
6 1 9 3 4 5 5 4 3 9 1
7 1 7 9 5 3 8 6 2 4 10
8 1 3 5 9 4 4 9 5 3 1
9 1 6 4 3 9 2 8 7 5 10
10 1 1 1 1 1 1 1 1 1 1

g = 2 g = 2 g=2

元素 1 2 3 4 5 6 7 8 9 10
10 1 8 2 4 9 7 3 6 5

31.6-2

解:

MODULAR-EXPONENTIATION(a, b, n)
c = 0
d = 1
let  be the binary representation of b
for i = 0 to k
    if b[i] == 1
        c = c + 1
        d = (d · a) mod n
    c = 2c
    a = (a · a) mod n
return d

31.6-3

解:调用MODULAR-EXPONENTIATION(a, Φ(n)-1, n)。
a ϕ ( n ) ≡ 1 ( m o d    n ) , a ⋅ a ϕ ( n ) − 1 ≡ 1 ( m o d    n ) , a − 1 ≡ a ϕ ( n ) − 1 ( m o d    n ) . \begin{array}{rlll} a^{\phi(n)} & \equiv & 1 & (\mod n), \\ a\cdot a^{\phi(n) - 1} & \equiv & 1 & (\mod n), \\ a^{-1} & \equiv & a^{\phi(n)-1} & (\mod n). \end{array} aϕ(n)aaϕ(n)1a111aϕ(n)1(modn),(modn),(modn).

31.7 RSA公钥加密系统

31.7-1

解: ϕ ( n ) = ( p − 1 ) ⋅ ( q − 1 ) = 280 \phi(n) = (p - 1) \cdot (q - 1) = 280 ϕ(n)=(p1)(q1)=280.
d = e − 1 m o d    ϕ ( n ) = 187 d = e^{-1} \mod \phi(n) = 187 d=e1modϕ(n)=187.
P ( M ) = M e m o d    n = 254 P(M) = M^e \mod n = 254 P(M)=Memodn=254.
S ( C ) = C d m o d    n = 25 4 187 m o d    n = 100 S(C) = C^d \mod n = 254^{187} \mod n = 100 S(C)=Cdmodn=254187modn=100.

31.7-2

证明: e d ≡ 1 m o d    ϕ ( n ) ed \equiv 1 \mod \phi(n) ed1modϕ(n)
e d − 1 = 3 d − 1 = k ϕ ( n ) ed - 1 = 3d - 1 = k \phi(n) ed1=3d1=kϕ(n)
如果 p , q < n / 4 p, q < n / 4 p,q<n/4
ϕ ( n ) = n − ( p + q ) + 1 > n − n / 2 + 1 = n / 2 + 1 > n / 2. \phi(n) = n - (p + q) + 1 > n - n / 2 + 1 = n / 2 + 1 > n / 2. ϕ(n)=n(p+q)+1>nn/2+1=n/2+1>n/2.
k n / 2 < 3 d − 1 < 3 d < 3 n kn / 2 < 3d - 1 < 3d < 3n kn/2<3d1<3d<3n,所以 k < 6 k < 6 k<6,所以可以解得 3 d − 1 = n − p − n / p + 1 3d - 1 = n - p - n / p + 1 3d1=npn/p+1

31.7-3

证明思路:
乘法:因为e和n互质。
解密:在每次迭代中随机选择一个素数 m m m m m m n n n互质,如果我们可以解密 m ⋅ M m \cdot M mM,那么我们可以返回 m − 1 M m^{ - 1} M m1M,因为 m − 1 = m n − 2 m^{-1}=m^{n - 2} m1=mn2

你可能感兴趣的:(算法,算法导论)