CINTA——6
第一题
利用中国剩余定理,解法如下:
1、记
a
=
8
,
b
=
3
,
p
=
11
,
q
=
19
,
n
=
11
⋅
19
=
209
;
a=8,b=3,p=11,q=19,n=11\cdot19=209;
a=8,b=3,p=11,q=19,n=11⋅19=209;
2、使用egcd算法求解
p
−
1
p^{-1}
p−1和
q
−
1
q^{-1}
q−1,它们分别使
p
p
−
1
≡
1
(
m
o
d
q
)
pp^{-1}\equiv1\pmod q
pp−1≡1(modq),
q
q
−
1
≡
1
(
m
o
d
p
)
qq^{-1}\equiv 1\pmod p
qq−1≡1(modp)。得到
p
−
1
=
7
,
q
−
1
=
7
(
o
r
−
4
)
p^{-1}=7,q^{-1}=7(or-4)
p−1=7,q−1=7(or−4)
(注意:乘法逆元并不唯一,可以为正,也可以为负,不影响最后的求解结果)
但是在群里面,群元素的乘法逆元唯一
3、令
x
=
a
q
q
−
1
+
b
p
p
−
1
(
m
o
d
n
)
x=aqq^{-1}+bpp^{-1}\pmod n
x=aqq−1+bpp−1(modn),解得
x
=
41
x=41
x=41
特别注意运算的最后不要忘记
(
m
o
d
p
q
)
\pmod{pq}
(modpq)
4、经验证可得:
x
x
x是正解。
第二题
根据中国剩余定理的推广版:
其实,思路和正常的中国剩余定理是相同的,只不过乘法逆元求得是对剩下元素乘积的逆元 (其实也可以看作一个,最后总会算成一个来求解的),而不单单是一个元素了
存在
M
=
5
⋅
7
⋅
9
⋅
11
M=5\cdot7\cdot9\cdot11
M=5⋅7⋅9⋅11,使得方程组模
M
M
M有唯一解
x
=
∑
i
=
0
n
a
i
b
i
b
−
1
(
m
o
d
M
)
x=\sum_{i=0}^na_i b_i b^{-1}\pmod M
x=i=0∑naibib−1(modM)
其中,
b
i
=
M
i
/
m
i
b_i=M_i/m_i
bi=Mi/mi,且存在
b
i
−
1
b_i^{-1}
bi−1使得
b
i
b
i
−
1
≡
1
(
m
o
d
m
i
)
b_ib_i^{-1}\equiv1\pmod {m_i}
bibi−1≡1(modmi)
根据egcd算法可以求得
b
i
b_i
bi的值
(
7
∗
9
∗
11
)
⋅
b
1
−
1
≡
1
(
m
o
d
5
)
(7*9*11)\cdot b_1^{-1}\equiv 1\pmod 5
(7∗9∗11)⋅b1−1≡1(mod5)
(
5
∗
9
∗
11
)
⋅
b
2
−
1
≡
1
(
m
o
d
7
)
(5*9*11)\cdot b_2^{-1}\equiv 1\pmod 7
(5∗9∗11)⋅b2−1≡1(mod7)
(
5
∗
7
∗
11
)
⋅
b
3
−
1
≡
1
(
m
o
d
9
)
(5*7*11)\cdot b_3^{-1}\equiv 1\pmod 9
(5∗7∗11)⋅b3−1≡1(mod9)
(
5
∗
7
∗
9
)
⋅
b
4
−
1
≡
1
(
m
o
d
11
)
(5*7*9)\cdot b_4^{-1}\equiv 1\pmod {11}
(5∗7∗9)⋅b4−1≡1(mod11)
得:
b
1
−
1
=
2
b_1^{-1}=2
b1−1=2,
b
2
−
1
=
3
b_2^{-1}=3
b2−1=3,
b
3
−
1
=
4
b_3^{-1}=4
b3−1=4,
b
4
−
1
=
8
b_4^{-1}=8
b4−1=8
故
x
=
1
∗
7
∗
9
∗
11
∗
2
+
2
∗
5
∗
9
∗
11
∗
3
+
3
∗
5
∗
7
∗
11
∗
4
+
4
∗
5
∗
9
∗
7
∗
8
(
m
o
d
5
∗
7
∗
9
∗
11
)
x=1∗7∗9∗11∗2+2∗5∗9∗11∗3+3∗5∗7∗11∗4+4∗5∗9∗7∗8 \pmod {5*7*9*11}
x=1∗7∗9∗11∗2+2∗5∗9∗11∗3+3∗5∗7∗11∗4+4∗5∗9∗7∗8(mod5∗7∗9∗11),得:
x
=
1731
x=1731
x=1731。
第三题
本题考查代数版本下的中国剩余定理:其实用数论版本下的中国剩余定理也可以做,只不过用代数版本的话会简单许多
设 n = pq,p和g是两个互素的正整数。给定一个任意正整数x,它可以表达为一个唯一的序对: ( [ x ( m o d p ) ] , [ x ( m o d q ) ] ) ([x\pmod p], [x\pmod q]) ([x(modp)],[x(modq)])
221可以分为13*17,17与13互素,x即为2000,故
x
↔
(
11
,
11
)
x\leftrightarrow(11,11)
x↔(11,11),故
200
0
2019
(
m
o
d
221
)
↔
(
11
,
11
)
2019
(
m
o
d
221
)
=
(
[
1
1
2019
(
m
o
d
13
)
]
,
[
1
1
2019
(
m
o
d
17
)
]
)
2000^{2019}\pmod{221}\leftrightarrow(11,11)^{2019}\pmod{221}=([11^{2019}\pmod {13}],[11^{2019}\pmod {17}])
20002019(mod221)↔(11,11)2019(mod221)=([112019(mod13)],[112019(mod17)])
再根据费尔马小定理,则上式等于
(
[
1
1
168
∗
(
13
−
1
)
+
3
(
m
o
d
13
)
]
,
[
1
1
126
∗
16
+
3
(
m
o
d
17
)
]
)
=
(
[
1
1
3
(
m
o
d
13
)
]
,
[
1
1
3
(
m
o
d
17
)
]
)
=
(
5
,
5
)
([11^{168*(13-1)+3}\pmod {13}],[11^{126*16+3}\pmod {17}])=([11^3\pmod {13}],[11^3\pmod {17}])=(5,5)
([11168∗(13−1)+3(mod13)],[11126∗16+3(mod17)])=([113(mod13)],[113(mod17)])=(5,5)
(
5
,
5
)
↔
5
(5,5)\leftrightarrow5
(5,5)↔5,故
200
0
2019
(
m
o
d
221
)
=
5
2000^{2019}\pmod{221}=5
20002019(mod221)=5
通过做题可以总结出一点规律:如果代数版本下的求解结果里面两个位置的数是完全相同的,那么最后的转换成一个数的结果就是这个数
第七题
from functools import reduce
#利用egcd算法求逆元
def egcd(a, b):
if b == 0:
return a, 1, 0
else:
g, x, y = egcd(b, a % b)
return g, y, x - (a // b) * y
#中国剩余定理求唯一解
def CRT(n, a):
sum = 0
prod = reduce(lambda a, b: a*b, n)
#reduce函数用于计算列表n中所有元素的乘积。lambda a, b: a*b是一个匿名函数,它接受两个参数a和b,并返回它们的乘积。
for n_i, a_i in zip(n, a):
p = prod // n_i
g, x, y = egcd(p, n_i)
sum += a_i * y * p
return sum % prod
#定义主函数
def main():
n = [3, 5, 7]#3同余5mod7
a = [2, 3, 2]#2同余3mod2
result = CRT(n, a)
print("同余方程的解为:", result)
if __name__ == "__main__":
main()