密码学Chapter2[数论]作业

密码学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×(1p11)×(1p21)××(1pn1)
欧拉函数计算 方法二(整数分解素数):
对 于 素 数 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)=p1pqp=q,n=p×qφ(n)=φ(p×q)=φ(p)×φ(q)=(p1)×(q1)

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的本原根 an
其中 φ ( 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  1234w11324

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=43=4(615153)×4=154×4615=154×619155×615=154×619155×(1234619)=309×619155×1234=309×(43213×1234)155×1234=309×43211082×1234
4321 − 1082 = 3239 4321-1082=3239 43211082=3239

乘法逆元为 123 4 − 1 m o d 4321 = 3239 1234^{-1}mod 4321=3239 12341mod4321=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=134×3=13(1613)×4=5×1316×4=(2916)×516×4=5×29(4529)×9=(7445)×1445×9=74×1445×23=74×14(11974)×23=74×37119×23=(550119×4)×37119×23=550×37119×171=550×37(1769550×3)×171=550×550171×1769
乘法逆元为 55 0 − 1 m o d 1769 = 550 550^{-1}mod 1769=550 5501mod1769=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×(151)=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×(121)×(151)=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 dNd<φ(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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值