博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中国剩余定理
阅读量:4686 次
发布时间:2019-06-09

本文共 788 字,大约阅读时间需要 2 分钟。

用来求解模数互质的同余方程组,

   即求一个数x,使得x除以n个模数分别为a1,a2,a3……an(注意这里的除数必须要两两互质)得到n个余数r1,r2,r3……rk。求这个数x.中国剩余定理求的就是这个数x。

 

求解过程:

    1)令p=a1*s2*a3*……*an,ki=p/ai (i从1到n)。

   2)我们要找到这样的数  di%ki==0且di%ai==ri (i从1到n)(这里可以用到我上篇讲到的扩展欧几里德算法来求得di),若这样的di不存在,则找不到这样的x,该题无解。

   3)当求出d1,d2,d3……dn后,相加得到w,w为其中一个解,且通解x=w+t*p (t为任意自然数)

    求解完毕。

证明:

   这里证明第3点。在(2)里,有di%ki=0,所有,di是可以整除ai外的所有除数,而且di%ai=ri

   所以我们很容易得知, (d1+d2+d3+……+dn)%ai

                       =d1%ai+d2%ai+d3%ai+……+dn%ai

                       =di%ai

                       =ri

    证毕。

重要提醒:

   这里的模数要求一定要两两互质,否则按这种方法做出的程序会出现各种问题。

   例如,当模数为4和6,余数为1和3时,显然我们得知答案是9,但用上述方法是求不出答案的。

   如果按照上述做法,无论6的多少倍模4都不可能模出1来。

   而两个数互质的话就能保证其中一个数的倍数模另一个数能模出所有的值

   假设a和b互质,则只需证明(t*a)%b=1(t为任意自然数)即可

   然后只需使t扩展n倍,则余数也会相应扩展n倍。

   那么如何证明呢?

   上式可变形为t*a=k*b+1。

   然后根据我上一篇博文所提到的扩展欧几里德算法,可知这个二元一次方程必定有解

相关题目:poj2891、poj1006,以及我大华农07年新生赛的韩信点兵

转载于:https://www.cnblogs.com/onestow/p/4333227.html

你可能感兴趣的文章
Git Stash用法
查看>>
线程与同步
查看>>
co源码解读
查看>>
Page directive must not have multiple occurrences of pageencoding
查看>>
Oracle获取异常的具体出处dbms_utility.format_error_backtrace
查看>>
Python爬虫技巧
查看>>
javascript C# 兼容的DES Base64加密/解密方法 整理
查看>>
利用$(window).resize()实现窗口大小自适应宽度问题
查看>>
OggVorbis 小记
查看>>
hibernate中多表映射关系配置
查看>>
react 高阶组件
查看>>
msi微星B350M主板开启VT(Virtualization Technology)
查看>>
java中可达对象和不可达对象
查看>>
react 路由跳转刷新页面参数消失
查看>>
Android 读取文件内容
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Jquery radio选中
查看>>
《Visual C++ 2010入门教程》系列二:安装、配置和首次使用VS2010
查看>>
P1351 联合权值[鬼畜解法]
查看>>
向下之旅(十七):虚拟文件系统(一)
查看>>