中国剩余定理Chinese remainder theorem(CRT)

2023-12-02 16:48

本文主要是介绍中国剩余定理Chinese remainder theorem(CRT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中国剩余定理

孙子定理Chinese remainder theorem(CRT)

参考 : 百度百科-中国剩余定理

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

x=2mod3
x=3mod5
x=2mod7
// 求解得: x = 23 

模算术和数论有相关算法可以解决这个问题,参考资料:《密码学原理与实践第三版》5.2章节 更多数论知识

1. Euclidean欧几里得算法

Euclidean算法的基本形式,可以给出两个正整数a、b的最大公因子Greatest Common Divisor(GCD)
在这里插入图片描述
举例计算 : g c d ( 99 , 63 ) gcd(99,63) gcd(9963)
99 = 1 ⋅ 63 + 36 99 = 1 · 63 + 36 99=163+36
63 = 1 ⋅ 36 + 27 63 = 1 · 36 + 27 63=136+27
36 = 1 ⋅ 27 + 9 36 = 1 · 27 + 9 36=127+9
27 = 3 ⋅ 9 + 0 27 = 3 · 9 + 0 27=39+0
g c d ( 99 , 63 ) = ( 63 , 36 ) = ( 36 , 27 ) = ( 27 , 9 ) = 9 gcd(99, 63) = (63, 36) = (36, 27) = (27, 9) = 9 gcd(99,63)=(63,36)=(36,27)=(27,9)=9

2. 扩展欧几里得算法,求模乘逆: b − 1 ( m o d a ) b^{-1}\pmod a b1(moda)

  1. 是否存在整数s,t,使得 s a + t b = ( a , b ) sa+tb=(a,b) sa+tb=(a,b)
    如果存在, 且 ( a , b ) = 1 (a,b)=1 (a,b)=1,则有 s a + t b = 1 sa+tb=1 sa+tb=1
    两边模a之后,得到 t b ≡ 1 ( m o d a ) tb\equiv 1\pmod a tb1(moda),即
    t = b − 1 ( m o d a ) t=b^{-1}\pmod a t=b1(moda)

  2. 书上例5.1计算 2 8 − 1 ( m o d 75 ) 28^{-1}\pmod{75} 281(mod75),如何计算s、t?
    定义 t j = { 0 , if  j = 0 ; 1 , if  j = 1 ; t j − 2 − q i − 1 t j − 1 , if  j ≥ 2 ; t_j = \begin{cases} 0, &\text{if } j=0; \\ 1, &\text{if } j=1; \\ t_{j-2}-q_{i-1}t_{j-1}, &\text{if } j\ge 2; \end{cases} tj=0,1,tj2qi1tj1,if j=0;if j=1;if j2;

    定义 s j = { 1 , if  j = 0 ; 0 , if  j = 1 ; s j − 2 − q i − 1 s j − 1 , if  j ≥ 2 ; s_j = \begin{cases} 1, &\text{if } j=0; \\ 0, &\text{if } j=1; \\ s_{j-2}-q_{i-1}s_{j-1}, &\text{if } j\ge 2; \end{cases} sj=1,0,sj2qi1sj1,if j=0;if j=1;if j2;
    在这里插入图片描述

  3. 书上模乘逆算法
    在这里插入图片描述

  4. Js版本模乘逆算法

题目:利用求逆算法,计算 104729 8 − 1 ( m o d 15484863 ) = 6926637 1047298^{-1}\pmod{15484863} = 6926637 10472981(mod15484863)=6926637

function MultiplicativeInverse(a, b) {let a0 = alet b0 = blet t0 = 0let t = 1let q = Math.floor(a0 / b0)let r = a0 - q * b0let j = 0// console.log("j", "rj", "qj", "tj")// console.log(j, a0, "-", t0)let qtemp = qwhile (r > 0) {const temp = (t0 - q * t) % at0 = tt = tempa0 = b0b0 = rq = Math.floor(a0 / b0)r = a0 - q * b0j++console.log(j, a0, qtemp, t0)qtemp = q}if (b0 !== 1) {return false} else {console.log(j + 1, b0, a0, t)return t}
}
  1. 测试结果
console.log(MultiplicativeInverse(75, 28))
j rj qj tj
0 75 - 0
1 28 2 1
2 19 1 -2
3 9 2 3
4 1 9 -8
-8
console.log(MultiplicativeInverse(15485863, 104729))
j rj qj tj
0 15485863 - 0
1 104729 147 1
2 90700 1 -147
3 14029 6 148
4 6526 2 -1035
5 977 6 2218
6 664 1 -14343
7 313 2 16561
8 38 8 -47465
9 9 4 396281
10 2 4 -1632589
11 1 2 6926637
6926637

3. 求解同余方程组

中国剩余定理,是求解以下的一元线性同余方程组的过程:

x ≡ a 1 ( m o d m 1 ) x\equiv a_1\pmod {m_1} xa1(modm1)
x ≡ a 2 ( m o d m 2 ) x\equiv a_2\pmod {m_2} xa2(modm2)
⋮ \vdots
x ≡ a 1 ( m o d m 1 ) x\equiv a_1\pmod {m_1} xa1(modm1)

中国剩余定理断言这个方程组有模 M = m 1 × m 2 × . . . × m r M=m_1\times m_2\times ...\times m_r M=m1×m2×...×mr的唯一解, 其解为:
x = ∑ i = 1 r a i M i y i ( m o d M ) x=\displaystyle\sum_{i=1}^ra_iM_iy_i \pmod M x=i=1raiMiyi(modM)
其中 M i = M / m i , y i = m i − 1 ( m o d m i ) , 1 ≤ i ≤ r M_i = M/m_i, y_i=m_i^{-1}\pmod{m_i}, 1\le i\le r Mi=M/miyi=mi1(modmi),1ir

在这里插入图片描述
现在求解:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

  1. M = 3 ∗ 5 ∗ 7 = 105 , M 1 = 5 ∗ 7 = 35 , M 2 = 3 ∗ 7 = 21 , M 3 = 3 ∗ 5 = 15 M=3*5*7=105,M_1=5*7=35,M_2=3*7=21,M_3=3*5=15 M=357=105,M1=57=35,M2=37=21,M3=35=15
  2. y 1 = M 1 逆 模 m 1 = 35 逆 模 3 = 2 , y 2 = 21 逆 模 5 = 1 , y 3 = 15 逆 模 7 = 1 y_1=M_1逆模m_1=35逆模3=2,y_2=21逆模5=1,y_3=15逆模7=1 y1=M1m1=353=2,y2=215=1,y3=157=1
  3. x = ( a 1 M 1 y 1 + a 2 M 2 y 2 + a 3 M 3 y 3 ) m o d M = ( 2 ∗ 35 ∗ 2 + 3 ∗ 21 ∗ 1 + 2 ∗ 15 ∗ 1 ) ( m o d 105 ) = 23 x=( a_1M_1y_1+a_2M_2y_2+a_3M_3y_3 )modM = (2*35*2+3*21*1+2*15*1) \pmod{105} = 23 x=(a1M1y1+a2M2y2+a3M3y3)modM=(2352+3211+2151)(mod105)=23

JS算法:

// 输入:[[2,3],[3,5],[2,7]]
function CRT(array) {let x = 0,M = 1for (let i = 0; i < array.length; i++) {const element = array[i]; // [2,3]M = M * element[1]}for (let i = 0; i < array.length; i++) {const element = array[i]; // [2,3]let Mi = M / element[1]let yi = MultiplicativeInverse(element[1], Mi)if (yi < 0) {yi = element[1] + yi}console.log(element[0], Mi, yi)x = x + element[0] * Mi * yi}console.log(x + "mod" + M + "=" + x % M)return x % M
}

书上习题5.6:求解同余方程组
{ x ≡ 12 ( m o d 25 ) , x ≡ 9 ( m o d 26 ) , x ≡ 23 ( m o d 27 ) , \begin{cases} x\equiv12\pmod{25}, \\ x\equiv 9\pmod{26}, \\ x\equiv 23\pmod{27}, \\ \end{cases} x12(mod25),x9(mod26),x23(mod27),

答案:14387。 测试结果:

console.log(CRT([[2, 3],[3, 5],[2, 7]
]))
result: 
2 35 2
3 21 1
2 15 1
233mod105=23
23console.log(CRT([[12, 25],[9, 26],[23, 27]
]))
result:
12 702 13
9 675 25
23 650 14
470687mod17550=14387
14387

——End——

这篇关于中国剩余定理Chinese remainder theorem(CRT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/446088

相关文章

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

【中国国际航空-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如

CPC23三 K.(Lucas定理)

K.喵喵的神·数 Time Limit: 1 Sec Memory Limit: 128 MB Description 喵喵对组合数比较感兴趣,并且对计算组合数非常在行。同时为了追求有后宫的素质的生活,喵喵每天都要研究质数。 我们先来复习一下什么叫做组合数。对于正整数P、T 然后我们再来复习一下什么叫质数。质数就是素数,如果说正整数N的约数只有1和它本身,N

中国书法——孙溟㠭浅析碑帖《越州石氏帖》

孙溟㠭浅析碑帖《越州石氏帖》 《越州石氏帖》  是一部汇集多本摹刻的帖,南宋时期的会稽石邦哲(字熙明)把家藏的一些法书碑帖集中一起摹刻成的,宋理宗时临安书商陈思《宝刻丛编》有记載这部帖的目录。现在还存有宋代时拓的残缺本,大多是相传的晋朝唐朝的小楷,后人多有临摹学习,并以此版本重新摹刻。 (图片来源于网络) 图文/氿波整理

将中国标准时间转换为年月日时分秒格式

1.将中国标准时间转换为年月日时分秒格式 代码如下(示例): // 时间格式化timestampToTime(timestamp) {var chinaStandard=Mon Jul 19 2021 11:11:55 GMT+0800 (中国标准时间);var date = new Date(chinaStandard);var y = date.getFullYear();var m =

热烈庆祝中国科学技术大学建校六六周年

卡西莫多的诗文集2022-2024.9月6-校庆国庆专版   欢迎分享 通过网盘分享的文件:卡西莫多的诗文集2022-2024.9月6-A5-校庆国庆专版.pdf 链接:  百度网盘 请输入提取码 提取码: umpm

《中国全屋智能行业发展现状与投资前景研究分析报告》

报告导读:本报告从国际全屋智能发展、国内全屋智能政策环境及发展、研发动态、供需情况、重点生产企业、存在的问题及对策等多方面多角度阐述了全屋智能市场的发展,并在此基础上对全屋智能的发展前景做出了科学的预测,最后对全屋智能投资潜力进行了分析。  订购链接:https://www.yxresearch.com/ 第一章全屋智能行业概念界定及发展环境剖析 第一节全屋智能行业相关概念界定 一、智能家