解:
a:
Y
A
=
a
X
A
(
m
o
d
157
)
=
5
15
(
m
o
d
157
)
=
(
5
4
)
3
5
3
(
m
o
d
157
)
=
79
Y_A = a^{X_A} (mod 157)=5^{15}(mod 157) = (5^4)^3 5^3(mod157)=79
YA=aXA(mod157)=515(mod157)=(54)353(mod157)=79
b:
Y
B
=
a
X
B
(
m
o
d
157
)
=
5
27
(
m
o
d
157
)
=
5
16
5
8
5
2
5
(
m
o
d
157
)
=
65
Y_B = a^{X_B} (mod 157)=5^{27}(mod 157) = 5^{16} 5^8 5^2 5(mod157)=65
YB=aXB(mod157)=527(mod157)=51658525(mod157)=65
c:
K
=
Y
A
X
B
(
m
o
d
157
)
=
Y
B
X
A
(
m
o
d
157
)
=
6
5
15
(
m
o
d
157
)
=
78
K=Y_A^{X_B}(mod 157)=Y_B^{X_A}(mod157)=65^{15}(mod157)=78
K=YAXB(mod157)=YBXA(mod157)=6515(mod157)=78
解:
a:
已
知
Y
B
=
a
X
B
m
o
d
q
,
即
10
=
5
X
B
m
o
d
23
,
将
1
至
22
依
次
代
入
X
B
。
当
X
B
=
3
时
,
满
足
上
式
,
所
以
X
B
=
3
。
已知Y_B=a^{X_B}modq,即10=5^{X_B}mod23,将1至22依次代入X_B。当X_B = 3时,满足上式,所以X_B=3。
已知YB=aXBmodq,即10=5XBmod23,将1至22依次代入XB。当XB=3时,满足上式,所以XB=3。
b:
K
=
Y
A
X
B
(
m
o
d
q
)
=
8
3
(
m
o
d
23
)
=
6
K=Y_A^{X_B}(mod q)=8^3(mod23)=6
K=YAXB(modq)=83(mod23)=6
c:
def is_primitive_root(a,p):
factor_list = get_factors(p-1)
for i in factor_list:
if pow(a,(p-1)/f,p) == 1:
return False
return True
def get_factors(N):
i= 2
l = []
while i<=N:
while N % i == 0:
N /= i
l.append(i)
i += 1
return l
因 为 23 − 1 = 22 的 质 因 子 是 2 和 11 , 同 时 5 2 ( m o d 23 ) = 2 ≠ 1 , 5 1 1 ( m o d 23 ) = 22 ≠ 1 , 以 上 两 数 都 不 等 于 1 , 说 明 5 是 模 23 的 原 根 因为23-1=22的质因子是2和11,同时5^2(mod23)=2\neq1,5^11(mod23)=22\neq1,以上两数都不等于1,说明 5 是模 23 的原根 因为23−1=22的质因子是2和11,同时52(mod23)=2=1,511(mod23)=22=1,以上两数都不等于1,说明5是模23的原根