密码学Chapter2[数论]作业
Chapter2 思考题
2.4 什么是素数?
大于1的自然数中,除了1和它本身没有其他因数的数
2.5 什么是欧拉函数?
a.欧拉函数的定义
对于⼀个正整数n,小于或等于n的正整数中与n互质的正整数个数(包括1)的个数
b.计算欧拉函数
首先分解质因数
n
=
p
1
×
p
2
×
p
3
×
p
4
×
.
.
.
.
.
.
×
p
n
n=p_1\times p_2\times p_3\times p_4\times ...... \times p_n
n=p1×p2×p3×p4×......×pn
欧拉函数计算 方法一(通用):
φ
(
n
)
=
n
×
(
1
−
1
p
1
)
×
(
1
−
1
p
2
)
×
…
…
×
(
1
−
1
p
n
)
\varphi(n) = n \times (1 - \frac {1} {p_1}) \times (1 - \frac {1} {p_2}) \times …… \times (1 - \frac {1} {p_n})
φ(n)=n×(1−p11)×(1−p21)×……×(1−pn1)
欧拉函数计算 方法二(整数分解素数):
对
于
素
数
p
,
存
在
φ
(
p
)
=
p
−
1
假
设
有
两
个
素
数
p
和
q
,
p
≠
q
,
那
么
对
于
n
=
p
×
q
,
存
在
φ
(
n
)
=
φ
(
p
×
q
)
=
φ
(
p
)
×
φ
(
q
)
=
(
p
−
1
)
×
(
q
−
1
)
\begin{aligned} &对于素数p,存在\varphi(p)=p-1 \\ &假设有两个素数p和q,p \not= q,那么对于n=p \times q,存在\\ & \varphi(n)=\varphi(p \times q)=\varphi(p) \times \varphi(q)=(p-1) \times (q-1) \end{aligned}
对于素数p,存在φ(p)=p−1假设有两个素数p和q,p=q,那么对于n=p×q,存在φ(n)=φ(p×q)=φ(p)×φ(q)=(p−1)×(q−1)
2.7 一个数的本原根是什么?
设该数为n,当
m
=
φ
(
n
)
a
m
m
o
d
n
=
1
m = \varphi(n) \\a^m mod \ n = 1
m=φ(n)ammod n=1
同时成立时,则称
a
为
n
的
本
原
根
a为n的本原根
a为n的本原根
其中
φ
(
n
)
\varphi(n)
φ(n)为欧拉函数
Chapter2 问题
2.10 求 Z 5 Z_5 Z5中各个非零元素的乘法逆元
Z 5 = { 0 , 1 , 2 , 3 , 4 } x 1 2 3 4 1 1 2 3 4 2 2 4 1 3 3 3 1 4 2 4 4 3 2 1 则 各 元 素 乘 法 逆 元 为 w w − 1 1 1 2 3 3 2 4 4 Z_5=\{0,1,2,3,4\} \\ \begin{array}{|c|c|c|c|c|c|} \hline x & 1 & 2 & 3 & 4 \\ \hline 1 & 1 & 2 & 3 & 4 \\ \hline 2 & 2 & 4 & 1 & 3 \\ \hline 3 & 3 & 1 & 4 & 2 \\ \hline 4 & 4 & 3 & 2 & 1 \\ \hline \end{array} \ 则各元素乘法逆元为\ \begin{array}{|c|c|} \hline \ \ w\ \ & w^{-1} \\ \hline 1 & 1 \\ \hline 2 & 3 \\ \hline 3 & 2 \\ \hline 4 & 4 \\ \hline \end{array} Z5={0,1,2,3,4}x123411234224133314244321 则各元素乘法逆元为 w 1234w−11324
2.12
a.求 g c d ( 24140 , 16762 ) gcd(24140,16762) gcd(24140,16762)
使用辗转相除法
24140
=
1
×
16762
+
7378
16762
=
2
×
7378
+
2006
7378
=
3
×
2006
+
1360
2006
=
1
×
1360
+
646
646
=
9
×
68
+
34
68
=
2
×
34
+
0
\begin{aligned} 24140&=1 \times 16762 + 7378 \\16762&=2 \times 7378 + 2006 \\7378&=3 \times 2006 + 1360 \\2006&=1 \times 1360 + 646 \\646&=9 \times 68 + 34 \\68&=2 \times 34 + 0 \end{aligned}
24140167627378200664668=1×16762+7378=2×7378+2006=3×2006+1360=1×1360+646=9×68+34=2×34+0
g
c
d
(
24140
,
16762
)
=
34
gcd(24140,16762)=34
gcd(24140,16762)=34
34
b.求 g c d ( 4655 , 12075 ) gcd(4655,12075) gcd(4655,12075)
使用辗转相除法
12705
=
2
×
4655
+
2765
4655
=
1
×
2765
+
1890
2765
=
1
×
1890
+
875
1890
=
2
×
875
+
140
875
=
6
×
140
+
35
140
=
4
×
35
+
0
\begin{aligned} 12705&=2 \times 4655 + 2765 \\4655&=1 \times 2765 + 1890 \\2765&=1 \times 1890 + 875 \\1890&=2 \times 875 + 140 \\875&=6 \times 140 + 35 \\140&=4 \times 35 + 0 \end{aligned}
12705465527651890875140=2×4655+2765=1×2765+1890=1×1890+875=2×875+140=6×140+35=4×35+0
g
c
d
(
4655
,
12075
)
=
35
gcd(4655,12075)=35
gcd(4655,12075)=35
35
2.16 用扩展欧几里得算法求得下列乘法逆元
a.1234 mod 4321
使用辗转相除法检查是否互素
4321
=
3
×
1234
+
619
1234
=
1
×
619
+
615
619
=
1
×
615
+
4
615
=
153
×
4
+
3
4
=
1
×
3
+
1
3
=
3
×
1
+
0
\begin{aligned} 4321&=3 \times 1234 + 619 \\1234&=1 \times 619 + 615 \\619&=1 \times 615 + 4 \\615&=153 \times 4 + 3 \\4&=1 \times 3 + 1 \\3&=3 \times 1 + 0 \end{aligned}
4321123461961543=3×1234+619=1×619+615=1×615+4=153×4+3=1×3+1=3×1+0
g
c
d
(
1234
,
4321
)
=
1
gcd(1234,4321)=1
gcd(1234,4321)=1,两数互素,则存在乘法逆元
1
=
4
−
3
=
4
−
(
615
−
153
)
×
4
=
154
×
4
−
615
=
154
×
619
−
155
×
615
=
154
×
619
−
155
×
(
1234
−
619
)
=
309
×
619
−
155
×
1234
=
309
×
(
4321
−
3
×
1234
)
−
155
×
1234
=
309
×
4321
−
1082
×
1234
\begin{aligned} 1&=4-3 \\&=4-(615-153 )\times 4\\&=154 \times 4 - 615 \\&=154 \times 619-155 \times 615\\&=154\times 619-155\times (1234-619) \\&=309\times 619-155\times 1234\\&=309\times (4321-3\times1234)-155\times 1234 \\&=309\times 4321-1082\times 1234 \end{aligned}
1=4−3=4−(615−153)×4=154×4−615=154×619−155×615=154×619−155×(1234−619)=309×619−155×1234=309×(4321−3×1234)−155×1234=309×4321−1082×1234
4321
−
1082
=
3239
4321-1082=3239
4321−1082=3239
乘法逆元为 123 4 − 1 m o d 4321 = 3239 1234^{-1}mod 4321=3239 1234−1mod4321=3239
3239
b.24140 mod 40902
使用辗转相除法检查是否互素
40902
=
1
×
24140
+
16762
24140
=
1
×
16762
+
7378
16762
=
2
×
7378
+
2006
7378
=
3
×
2006
+
1360
2006
=
1
×
1360
+
646
1360
=
2
×
646
+
68
646
=
9
×
68
+
34
68
=
2
×
34
+
0
\begin{aligned} 40902&=1 \times 24140 + 16762 \\24140&=1 \times 16762 + 7378 \\16762&=2 \times 7378 + 2006 \\7378&=3 \times 2006 + 1360 \\2006&=1 \times 1360 + 646 \\1360&=2 \times 646 + 68 \\646&=9 \times 68 + 34 \\68&=2 \times 34 + 0 \end{aligned}
40902241401676273782006136064668=1×24140+16762=1×16762+7378=2×7378+2006=3×2006+1360=1×1360+646=2×646+68=9×68+34=2×34+0
g
c
d
(
24140
,
40902
)
=
34
gcd(24140,40902)=34
gcd(24140,40902)=34,两数不互素,无乘法逆元
无
c.550 mod 1769
1769 = 3 × 550 + 119 550 = 4 × 119 + 74 119 = 1 × 74 + 45 74 = 1 × 45 + 29 45 = 1 × 29 + 16 29 = 1 × 16 + 13 16 = 1 × 13 + 3 13 = 4 × 3 + 1 \begin{aligned} 1769&=3 \times 550 + 119 \\550&=4 \times 119 + 74 \\119&=1 \times 74 + 45 \\74&=1 \times 45 + 29 \\45&=1 \times 29 + 16 \\29&=1 \times 16 + 13 \\16&=1 \times 13 + 3 \\13&=4 \times 3 + 1 \end{aligned} 17695501197445291613=3×550+119=4×119+74=1×74+45=1×45+29=1×29+16=1×16+13=1×13+3=4×3+1
g
c
d
(
550
,
1769
)
=
1
gcd(550,1769)=1
gcd(550,1769)=1,两数互素,存在乘法逆元
1
=
13
−
4
×
3
=
13
−
(
16
−
13
)
×
4
=
5
×
13
−
16
×
4
=
(
29
−
16
)
×
5
−
16
×
4
=
5
×
29
−
(
45
−
29
)
×
9
=
(
74
−
45
)
×
14
−
45
×
9
=
74
×
14
−
45
×
23
=
74
×
14
−
(
119
−
74
)
×
23
=
74
×
37
−
119
×
23
=
(
550
−
119
×
4
)
×
37
−
119
×
23
=
550
×
37
−
119
×
171
=
550
×
37
−
(
1769
−
550
×
3
)
×
171
=
550
×
550
−
171
×
1769
\begin{aligned} 1&=13-4 \times 3 \\&=13-(16-13)\times 4 \\&=5 \times 13 - 16 \times 4 \\&=(29-16) \times 5- 16 \times 4 \\&=5 \times 29 -(45-29)\times 9 \\&=(74-45)\times 14-45\times 9 \\&=74\times 14-45\times 23 \\&=74\times 14-(119-74)\times 23 \\&=74\times 37-119\times 23 \\&=(550-119\times 4)\times 37-119\times 23 \\&=550\times 37-119\times 171 \\&=550\times 37-(1769-550\times 3)\times 171 \\&=550\times 550 - 171\times 1769 \end{aligned}
1=13−4×3=13−(16−13)×4=5×13−16×4=(29−16)×5−16×4=5×29−(45−29)×9=(74−45)×14−45×9=74×14−45×23=74×14−(119−74)×23=74×37−119×23=(550−119×4)×37−119×23=550×37−119×171=550×37−(1769−550×3)×171=550×550−171×1769
乘法逆元为
55
0
−
1
m
o
d
1769
=
550
550^{-1}mod 1769=550
550−1mod1769=550
550
2.20 用费马定理计算 3 201 m o d 11 3^{201} mod 11 3201mod11
3 1 m o d 11 = 3 3 2 m o d 11 = 2 3 3 m o d 11 = 5 3 4 m o d 11 = 4 3 5 m o d 11 = 1 3 6 m o d 11 = 3 3 7 m o d 11 = 2 . . . . . . 3 201 m o d 11 = 3 1 + 5 × 40 m o d 11 = 3 m o d 11 = 3 \begin{aligned} 3^1mod\ 11&=3 \\3^2mod\ 11&=2 \\3^3mod\ 11&=5 \\3^4mod\ 11&=4 \\3^5mod\ 11&=1 \\3^6mod\ 11&=3 \\3^7mod\ 11&=2 \\ ...... \\3^{201}mod\ 11&=3^{1+5\times 40}mod \ 11 \\&=3mod \ 11 \\&=3 \end{aligned} 31mod 1132mod 1133mod 1134mod 1135mod 1136mod 1137mod 11......3201mod 11=3=2=5=4=1=3=2=31+5×40mod 11=3mod 11=3
3
2.36 找出25的所有本原根
n = 25 ; 25 = 5 2 φ ( 25 ) = 25 × ( 1 − 1 5 ) = 20 n=25;\ 25=5^2\\ \varphi(25)=25\times (1-\frac {1} {5})=20\\ n=25; 25=52φ(25)=25×(1−51)=20
本原根数量:
φ
(
φ
(
25
)
)
=
φ
(
20
)
;
20
=
2
2
×
5
\varphi(\varphi(25))=\varphi(20); 20=2^2\times 5\\
φ(φ(25))=φ(20);20=22×5
φ ( 20 ) = 20 × ( 1 − 1 2 ) × ( 1 − 1 5 ) = 8 \varphi(20)=20\times (1-\frac {1} {2})\times (1-\frac {1} {5})=8\\ φ(20)=20×(1−21)×(1−51)=8
共有
8
8
8个本原根,设一个其中本原根为
2
2
2,使用费马定理计算
2
20
m
o
d
25
2^{20} mod 25
220mod25是否等于
1
1
1
2
1
m
o
d
25
=
2
2
2
m
o
d
25
=
4
2
3
m
o
d
25
=
8
2
4
m
o
d
25
=
16
2
5
m
o
d
25
=
7
2
6
m
o
d
25
=
14
2
7
m
o
d
25
=
3
2
8
m
o
d
25
=
6
2
9
m
o
d
25
=
12
2
10
m
o
d
25
=
1
.
.
.
.
.
.
2
20
m
o
d
25
=
2
10
×
2
m
o
d
25
=
1
\begin{aligned} 2^1mod\ 25&=2 \\2^2mod\ 25&=4 \\2^3mod\ 25&=8 \\2^4mod\ 25&=16 \\2^5mod\ 25&=7 \\2^6mod\ 25&=14 \\2^7mod\ 25&=3 \\2^8mod\ 25&=6 \\2^9mod\ 25&=12 \\2^{10}mod\ 25&=1 \\ ...... \\2^{20}mod\ 25&=2^{10\times 2}mod \ 25=1 \end{aligned}
21mod 2522mod 2523mod 2524mod 2525mod 2526mod 2527mod 2528mod 2529mod 25210mod 25......220mod 25=2=4=8=16=7=14=3=6=12=1=210×2mod 25=1
验证
2
2
2为
25
25
25的本原根之一
d
∈
N
d
<
φ
(
25
)
(
d
,
φ
(
25
)
)
=
1
d\in N\\ d<\varphi(25)\\ (d,\varphi(25))=1
d∈Nd<φ(25)(d,φ(25))=1
则
d
=
1
,
3
,
7
,
9
,
11
,
13
,
17
,
19
d=1,3,7,9,11,13,17,19
d=1,3,7,9,11,13,17,19
2 1 m o d 25 = 2 2 3 m o d 25 = 8 2 7 m o d 25 = 3 2 9 m o d 25 = 12 2 11 m o d 25 = 23 2 13 m o d 25 = 17 2 17 m o d 25 = 22 2 19 m o d 25 = 13 \begin{aligned} 2^1mod\ 25&=2 \\2^3mod\ 25&=8 \\2^7mod\ 25&=3 \\2^9mod\ 25&=12 \\2^{11}mod\ 25&=23 \\2^{13}mod\ 25&=17 \\2^{17}mod\ 25&=22 \\2^{19}mod\ 25&=13 \end{aligned} 21mod 2523mod 2527mod 2529mod 25211mod 25213mod 25217mod 25219mod 25=2=8=3=12=23=17=22=13
25的本原根:2、8、3、12、23、17、22、13
Supplementary Problem
用任何编程语言编写程序,找出1000以内所有的素数,并给出符合条件的素数总数和程序花费的运行时间。请给出源码,运行界面截图。
import time
start_time = time.perf_counter()
def number_of_prime(n):
num = 1
sum = 0
for num in range(n+1):
if num < 2:
pass
else:
for i in range(2,num):
if num%i==0:
pass
break
else:
sum = sum + 1
return sum
num=int(input('请输入范围上限:'))
sum = number_of_prime(num)
print('1000以内素数总数为:%d'%sum)
end_time = time.perf_counter()
run_time = end_time - start_time
print('-------------程序运行时间-------------')
print(run_time)
PS C:\Users\12827\Desktop> python .\素数总数.py
请输入范围上限:1000
1000以内素数总数为:168
-------------程序运行时间-------------
2.4251048