运 用 C R T 求 解 : x ≡ 8 ( m o d 11 ) x ≡ 3 ( m o d 19 ) 运用CRT求解:x\equiv8(mod\ 11)\ \ x\equiv3(mod\ 19) 运用CRT求解:x≡8(mod 11) x≡3(mod 19)
g c d ( 11 , 19 ) = 1 , x ≡ ( 8 ∗ 19 ∗ 1 9 − 1 + 3 ∗ 11 ∗ 1 1 − 1 ) m o d 11 ∗ 19 gcd(11,19)=1,x\equiv(8*19*19^{-1}+3*11*11^{-1})mod\ 11*19 gcd(11,19)=1,x≡(8∗19∗19−1+3∗11∗11−1)mod 11∗19
19 ∗ 1 9 − 1 ≡ 1 ( m o d 11 ) , 1 9 − 1 = 7 19*19^{-1}\equiv1(mod\ 11),19^{-1}=7 19∗19−1≡1(mod 11),19−1=7
11 ∗ 1 1 − 1 ≡ 1 ( m o d 19 ) , 1 1 − 1 = 7 11*11^{-1}\equiv1(mod\ 19),11^{-1}=7 11∗11−1≡1(mod 19),11−1=7
x ≡ ( 8 ∗ 19 ∗ 7 + 3 ∗ 11 ∗ 7 ) m o d 11 ∗ 19 ≡ 1295 ( m o d 209 ) ≡ 41 x\equiv(8*19*7+3*11*7)mod\ 11*19\equiv1295(mod\ 209)\equiv41 x≡(8∗19∗7+3∗11∗7)mod 11∗19≡1295(mod 209)≡41
故 , x = 41 , 经 验 证 x = 41 为 同 余 方 程 组 的 解 故,x=41,经验证x=41为同余方程组的解 故,x=41,经验证x=41为同余方程组的解
运 用 C R T 求 解 : x ≡ 1 ( m o d 5 ) x ≡ 2 ( m o d 7 ) 运用CRT求解:x\equiv1(mod\ 5)\ \ x\equiv2(mod\ 7) 运用CRT求解:x≡1(mod 5) x≡2(mod 7)
x ≡ 3 ( m o d 9 ) x ≡ 4 ( m o d 11 ) x\equiv3(mod\ 9)\ \ x\equiv4(mod\ 11) x≡3(mod 9) x≡4(mod 11)
5 , 7 , 9 , 11 两 两 互 素 5,7,9,11两两互素 5,7,9,11两两互素
x ≡ ( 1 ∗ ( 7 ∗ 9 ∗ 11 ) ∗ a − 1 + 2 ∗ ( 5 ∗ 9 ∗ 11 ) ∗ b − 1 + 3 ∗ ( 5 ∗ 7 ∗ 11 ) ∗ c − 1 + 4 ∗ ( 5 ∗ 7 ∗ 9 ) ∗ d − 1 ) m o d ( 5 ∗ 7 ∗ 9 ∗ 11 ) x\equiv(1*(7*9*11)*a^{-1}+2*(5*9*11)*b^{-1}+3*(5*7*11)*c^{-1}+4*(5*7*9)*d^{-1})mod\ (5*7*9*11) x≡(1∗(7∗9∗11)∗a−1+2∗(5∗9∗11)∗b−1+3∗(5∗7∗11)∗c−1+4∗(5∗7∗9)∗d−1)mod (5∗7∗9∗11)
( 7 ∗ 9 ∗ 11 ) ∗ a − 1 ≡ 1 ( m o d 5 ) , a − 1 = 2 (7*9*11)*a^{-1}\equiv1(mod\ 5),a^{-1}=2 (7∗9∗11)∗a−1≡1(mod 5),a−1=2
( 5 ∗ 9 ∗ 11 ) ∗ b − 1 ≡ 1 ( m o d 7 ) , b − 1 = 3 (5*9*11)*b^{-1}\equiv1(mod\ 7),b^{-1}=3 (5∗9∗11)∗b−1≡1(mod 7),b−1=3
( 5 ∗ 7 ∗ 11 ) ∗ c − 1 ≡ 1 ( m o d 9 ) , c − 1 = 4 (5*7*11)*c^{-1}\equiv1(mod\ 9),c^{-1}=4 (5∗7∗11)∗c−1≡1(mod 9),c−1=4
( 5 ∗ 7 ∗ 9 ) ∗ d − 1 ≡ 1 ( m o d 11 ) , d − 1 = 8 (5*7*9)*d^{-1}\equiv1(mod\ 11),d^{-1}=8 (5∗7∗9)∗d−1≡1(mod 11),d−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 ) ≡ 1731 x\equiv1*7*9*11*2+2*5*9*11*3+3*5*7*11*4+4*5*9*7*8(mod\ 5*7*9*11)\equiv1731 x≡1∗7∗9∗11∗2+2∗5∗9∗11∗3+3∗5∗7∗11∗4+4∗5∗9∗7∗8(mod 5∗7∗9∗11)≡1731
故 , x = 1731 , 经 验 证 x = 1731 为 同 余 方 程 组 的 解 故,x=1731,经验证x=1731为同余方程组的解 故,x=1731,经验证x=1731为同余方程组的解
手动计算 200 0 2019 ( m o d 221 ) 2000^{2019}(mod\ 221) 20002019(mod 221)
221 = 13 ∗ 17 , g c d ( 13 , 17 ) = 1 221=13*17,gcd(13,17)=1 221=13∗17,gcd(13,17)=1
2000 ↔ ( 11 , 11 ) 2000\leftrightarrow(11,11) 2000↔(11,11)
( 11 , 11 ) 2019 = ( [ 1 1 2019 m o d 13 ] , [ 1 1 2019 m o d 17 ] ) (11,11)^{2019}=([11^{2019}mod\ 13],[11^{2019}mod\ 17]) (11,11)2019=([112019mod 13],[112019mod 17])
运 用 费 马 小 定 理 , 1 1 2019 m o d 13 ≡ 1 1 12 ∗ 168 + 3 m o d 13 ≡ 1 1 3 m o d 13 ≡ ( − 8 ) m o d 13 ≡ 5 运用费马小定理,11^{2019}mod\ 13\equiv11^{12*168+3}mod\ 13\equiv11^{3}mod\ 13\equiv(-8)mod\ 13\equiv5 运用费马小定理,112019mod 13≡1112∗168+3mod 13≡113mod 13≡(−8)mod 13≡5
1 1 2019 m o d 17 ≡ 1 1 16 ∗ 126 + 3 m o d 17 ≡ 1 1 3 m o d 17 ≡ ( − 216 ) m o d 17 ≡ 5 11^{2019}mod\ 17\equiv11^{16*126+3}mod\ 17\equiv11^{3}mod\ 17\equiv(-216)mod\ 17\equiv5 112019mod 17≡1116∗126+3mod 17≡113mod 17≡(−216)mod 17≡5
( 11 , 11 ) 2019 = ( 5 , 5 ) (11,11)^{2019}=(5,5) (11,11)2019=(5,5)
所 以 , 200 0 2019 ( m o d 221 ) = 5 所以,2000^{2019}(mod\ 221)=5 所以,20002019(mod 221)=5
P S : 200 0 2019 ( m o d 221 ) 不 能 运 用 费 马 小 定 理 , 因 为 221 不 是 素 数 PS:2000^{2019}(mod\ 221)不能运用费马小定理,因为221不是素数 PS:20002019(mod 221)不能运用费马小定理,因为221不是素数
实现一个利用CRT求解同余方程的程序
运 用 拓 展 欧 几 里 得 算 法 求 逆 元 运用拓展欧几里得算法求逆元 运用拓展欧几里得算法求逆元
前 段 时 间 做 极 客 大 挑 战 2023 的 密 码 题 , 发 现 了 一 道 拓 展 中 国 剩 余 定 理 的 解 法 前段时间做极客大挑战2023的密码题,发现了一道拓展中国剩余定理的解法 前段时间做极客大挑战2023的密码题,发现了一道拓展中国剩余定理的解法
了 解 了 一 下 , 确 实 e x C R T 和 C R T 可 以 说 是 没 什 么 关 系 , 思 路 大 致 是 明 白 了 了解了一下,确实exCRT和CRT可以说是没什么关系,思路大致是明白了 了解了一下,确实exCRT和CRT可以说是没什么关系,思路大致是明白了
def exgcd(a, b):
if b == 0:
return 1, 0, a
x, y, q = exgcd(b, a % b)
x, y = y, (x - a // b * y)
return x, y, q
def CRT(a, n):
sum = 0
prod = 1
for n_i in n:
prod *= n_i
for a_i, n_i in zip(a, n):
p = prod // n_i
sum += a_i * p * exgcd(p, n_i)[0]
return int(sum % prod)
def exCRT(a, m, n): # 模数m,余数a,组数n
if n == 1:
if m[0] > a[0]:
return a[0]
else:
return -1
for i in range(n):
if m[i] <= a[i]:
return -1
x, y, d = exgcd(m[0], m[i])
if (a[i] - a[0]) % d != 0:
return -1
t = m[i] // d
x = (a[i] - a[0]) // d * x % t
a[0] = x * m[0] + a[0]
m[0] = m[0] * m[i] // d
a[0] = (a[0] % m[0] + m[0]) % m[0]
return a[0]
# x = a_i mod n_i
a0 = [1, 2, 3, 4]
n0 = [5, 7, 9, 11]
a1 = [1, 1, 4]
n1 = [3, 6, 7]
ans0 = CRT(a0, n0)
ans1 = CRT(a1, n1)
ans2 = exCRT(a0, n0, 4)
ans3 = exCRT(a1, n1, 3)
print("运用CRT解同余方程:")
print("模数互素,x =", ans0)
print("(x此时是错误的)模数不互素,x =", ans1)
print("\n运用exCRT解同余方程:")
print("模数互素,x =", ans2)
print("模数不互素,x =", ans3)