中国剩余定理及python实现
CRT,中国剩余定理公式推导以及python实现,中国剩余定理模数不互素情况
中国剩余定理及python实现
k e y w o r d s : keywords: keywords: CRT
F o r m u l a Formula Formula
设正整数 m 1 , m 2 , ⋯ , m k m_1,m_2,\cdots,m_k m1,m2,⋯,mk两两互素,则
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) x ≡ a 3 ( m o d m 3 ) ⋮ x ≡ a k ( m o d m k ) ⇒ x ≡ a 1 ⋅ M 1 ⋅ M 1 − 1 + a 2 ⋅ M 2 ⋅ M 2 − 1 + ⋯ + a k ⋅ M k ⋅ M k − 1 ( m o d M ) \begin{cases} x\equiv a_1 \pmod {m_1}\\ x\equiv a_2 \pmod {m_2}\\ x\equiv a_3 \pmod {m_3}\\ \vdots\\ x\equiv a_k \pmod{m_k} \end{cases} \Rightarrow x\equiv a_1\cdot M_1\cdot M_1^{-1}+a_2\cdot M_2\cdot M_2^{-1}+\cdots+a_k\cdot M_k\cdot M_k^{-1} \pmod {M} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x≡a1(modm1)x≡a2(modm2)x≡a3(modm3)⋮x≡ak(modmk)⇒x≡a1⋅M1⋅M1−1+a2⋅M2⋅M2−1+⋯+ak⋅Mk⋅Mk−1(modM)
其中 M = m 1 ⋅ m 2 ⋯ m k M=m_1\cdot m_2\cdots m_k M=m1⋅m2⋯mk; M i = M m i M_i = \frac{M}{m_i} Mi=miM; M i − 1 M_i^{-1} Mi−1满足 M i − 1 ⋅ M i ≡ 1 ( m o d m i ) M_i^{-1} \cdot Mi\equiv 1\pmod {m_i} Mi−1⋅Mi≡1(modmi);
此时 x x x是该同余式方程组在模 M M M下的解(是唯一的)
P y t h o n a p p l i c a t i o n Python~application Python application
from functools import reduce
def CRT(moudle,a):
M = reduce((lambda x,y : x * y),moudle)
result = 0
for mi in moudle:
Mi = M // mi
inv_Mi = gmpy2.invert(Mi,mi)
result = (result + a[moudle.index(mi)] * Mi * inv_Mi) % M
return result % M
传入的module
是由各个同余式的模数构成的列表
a
是同余式右侧(实际上左右都一样)的已知数值
整个函数求得的结果即是上文公式提到的x=result
,该x
是涉及的所有同余式的根且唯一
E x t e n s i o n Extension Extension
实际上应用时,还可能遇到模数不互素的情况,也即是公式中的 m 1 , m 2 , m 3 ⋯ m_1,m_2,m_3\cdots m1,m2,m3⋯两两不互素的这个条件不成立,此时也可以使用中国剩余定理(CRT)
(11条消息) 中国剩余定理模数不互素的情况_M3ng@L的博客-CSDN博客
R e f e r e n c e Reference Reference

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)