中国剩余定理 CRT
中国剩余定理 CRT
正常版本CRT
要解的是一个很容易的东西
\[
\begin{aligned}
x\equiv a_1(mod\ m_1)\\
x\equiv a_2(mod\ m_2)\\
...\\
x\equiv a_n(mod\ m_n)
\end{aligned}
\]
保证\(m_1,m_2...m_n\)之间两两互质,求最小的\(x\)。
设\(M=\prod m_i\)。
首先我们确定一点,我们求出了任意一个满足条件的\(x\)之后,只需要对其模\(M\)就是最终的答案。
因为\(M\)是所有数的\(lcm\)。
考虑一下,对于每一个\(a_i\),如果我们能够求出一个数\(x_i\)
满足它是其他所有\(m\)的乘积,即\(M_i=M/m_i\)的倍数,并且\(x_i\equiv 1(mod\ m_i)\)
也就是对于任意一个\(x_i\),满足\(x_i\equiv 0(mod\ m_k),k\ne i\),\(x_i\equiv 1(mode\ m_i)\)
那么最终的答案就会是\(\sum(a_ix_i)mod\ M\)。
深思熟虑的考虑如何求出\(x_i\),
因为\(x_i\)是\(M_i\)的倍数,所以\(x_i=kM_i\equiv 1(mod\ m_i)\)
所以\(k\)是\(M_i\)在模\(m_i\)意义下的逆元。所以\(x_i\)就是\(k\)的\(M_i\)倍,注意最终统计入结果的模数是\(M\)。
所以,\(CRT\)的结果就是\(\sum (a_ik_iM_i)mod\ M\)。
不正常版本CRT
要求的东西同上,不保证所有\(m_i\)互质。
我们肯定不能像上面那样堆在一起求了。
换个方法,假设我们只有两个方程。\(x\equiv a_1(mod\ m_1),x\equiv a_2(mod\ m_2)\)
怎么算答案?
显然是要满足:\(x=x_1m_1+a_1=x_2m_2+a_2\),并且\(x\)最小。
显然是\(x_1,x_2\)都要尽可能的小。
所以\(x_1m_1+x_2m_2=a_2-a_1\)
那么\(exgcd\)可以求解最小的\(x_1\),然后就可以求得\(x=x_1m_1+a_1\)
这样子就可以同时满足这两个方程了,因为方程有多个,
所以我们把这两个方程合并,假设当前求出来的解是\(x'\)
那么我们就新加入一个方程\(x\equiv x'(mod\ lcm(m_1,m_2))\)就好了。
中国剩余定理 CRT的更多相关文章
- 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...
- 中国剩余定理(CRT)及其扩展(EXCRT)详解
问题背景 孙子定理是中国古代求解一次同余式方程组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第 ...
- 扩展GCD 中国剩余定理(CRT) 乘法逆元模版
extend_gcd: 已知 a,b (a>=0,b>=0) 求一组解 (x,y) 使得 (x,y)满足 gcd(a,b) = ax+by 以下代码中d = gcd(a,b).顺便求出gc ...
- 中国剩余定理(CRT)及其拓展(ExCRT)
中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ...
- 学习笔记:中国剩余定理(CRT)
引入 常想起在空间里见过的一些智力题,这个题你见过吗: 一堆苹果,\(3\)个\(3\)个地取剩\(1\)个,\(5\)个\(5\)个地取剩\(1\)个,\(7\)个\(7\)个地取剩\(2\)个,苹 ...
- CRT&EXCRT 中国剩余定理及其扩展
前言: 中国剩余定理又名孙子定理.因孙子二字歧义,常以段子形式广泛流传. 中国剩余定理并不是很好理解,我也理解了很多次. CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法. 求满足n个条 ...
- 扩展中国剩余定理(扩展CRT)详解
今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$ ...
- 欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍
1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. int gcd(int x,int y){ ?x:gcd(y,x%y); } int lcm(int x,int y){ return x* ...
- 【CRT】中国剩余定理简介
中国剩余定理(CRT) 中国剩余定理出自中国的某本古书,似乎是孙子兵法?(雾 其中有这样一个问题: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 即,对于这样一个方程组: \[ ...
随机推荐
- centos6.3部署配置LVS主从
LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统.这个项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.它的官方网址 ...
- C# 类如何声明索引器以提供对类的类似数组的访问的代码
研发期间,将内容过程中比较常用的内容段做个收藏,如下内容内容是关于 C# 类如何声明索引器以提供对类的类似数组的访问.的内容,希望能对各位有用处. using System;using System. ...
- QT日志系统
今天给大家介绍下QT里面的日志系统,直接上代码 #include <QApplication> #include <iostream> #include "ThorH ...
- npm缺少css-loader,/style-compiler,stylus-loader问题,npm没有权限无法全局更新问题【已解决】
ERROR in ./node_modules/css-loader!./node_modules/vue-loader/lib/style-compiler?{"vue":tru ...
- nginx + flask + uwsgi + centos + python3 搭建web项目
1. python3之前已经搭建好,安装flask,使用 pip3 intall flask,这个比较简单,就不过多介绍 2.我在 /usr/local/nginx/html3 (html3是我新建 ...
- ZYNQ EMIO使用及可重用封装
为了快速实现算法板级验证,PC端需要通过JTAG或以太网与FPGA形成通路.最简单便捷的方案是利用协议栈芯片,用户可以无视底层,利用简单的SPI协议读写寄存器实现复杂的TCP UDP等网络协议.当然带 ...
- Netty初体验
package netty_starter; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFut ...
- linux vi粘贴格式易错乱
对于一些冗长的代码完全可以粘贴的时候,vi粘贴所有格式全部错乱,完全无法阅读. 解决办法:esc进入命令行模式后,输入 :set paste,然后再i进入粘贴编辑模式,即可正常复制并保留原有格式-
- Linux-基础学习(二)-基本部署
开始今日份整理 1. 系统优化部分 1.1 Linux防火墙安全相关(重要) 1.1.1 SELinux功能 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA ...
- Golang 入门系列(六)理解Go中的协程(Goroutine)
前面讲的都是一些Go 语言的基础知识,感兴趣的朋友可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category/1275863.html. 今天就 ...