模线性方程&&中国剩余定理及拓展
一、求解模线性方程



由ax=b(mod n)
可知ax = ny + b
就相当于ax + ny = b
由扩展欧几里得算法可知有解条件为gcd(a, n)整除d
可以直接套用扩展欧几里得算法
最终由d个不同解时在模n下有d个不同的数字
二、中国剩余定理

证明可看:https://www.cnblogs.com/MashiroSky/p/5918158.html
ll extgcd(ll a, ll b, ll& x, ll& y)
//求解ax+by=gcd(a, b)
//返回值为gcd(a, b)
{
ll d = a;
if(b)
{
d = extgcd(b, a % b, y, x);
y -= (a / b) * x;
}
else x = , y = ;
return d;
}
ll solve(ll a[], ll m[], int n)//a数组是余数,m数组是两两互质的数字
{
ll M = , ans = ;
for(int i = ; i < n; i++)M *= m[i];
//cout<<M<<endl;
for(int i = ; i < n; i++)
{
ll mi = M / m[i], x, y;
extgcd(mi, m[i], x, y);
//求出mi模上m[i]的逆元x mi * x + m[i] * y = gcd(mi, m[i]) = 1(两两互质)
ans = ans + ((a[i] % M) * (mi % M) % M) * (x % M) % M;
ans = (ans % M + M) % M;
}
return ans;
}
三、中国剩余定理扩展---求解一般的模线性方程组
  普通的中国剩余定理要求所有的互素,那么如果不互素呢,怎么求解同余方程组?
这种情况就采用两两合并的思想,假设要合并如下两个方程:
那么得到:
我们需要求出一个最小的xx使它满足:


在代码中,每次求出m0 * x + m[i] * y = a[i] - a0的解x的时候,对x模上m[i],这是为了保证x绝对值较小,防止之后的乘法溢出,
x的通解就是x + k * m[i] / gcd(m0, m[i]),此处模上m[i] / gcd(m0, m[i])更好
ll extgcd(ll a, ll b, ll& x, ll& y)
//求解ax+by=gcd(a, b)
//返回值为gcd(a, b)
{
ll d = a;
if(b)
{
d = extgcd(b, a % b, y, x);
y -= (a / b) * x;
}
else x = , y = ;
return d;
}
ll solve(ll a[], ll m[], int n)//a数组是余数,m数组是除数
{
ll m0 = m[], a0 = a[];
for(int i = ; i < n; i++)
{
ll x, y;
ll g = extgcd(m0, m[i], x, y);//求出m0 * x + m[i] * y = gcd(x, y)
if((a[i] - a0) % g)return -;
x = x * (a[i] - a0) / g % m[i];
//求出m0 * x + m[i] * y = a[i] - a0的解x
//此处模上m[i]是为了取绝对值最小的一个x,因为x的通解就是x+k*m[i]
ll K = x * m0 + a0; //代回原式,求出最大的K
m0 = m0 / g * m[i]; //m0更新为m0和m[i]的lcm
a0 = K; //a0更新为K
a0 = ((a0 % m0) + m0) % m0;
}
return a0;
}
模线性方程&&中国剩余定理及拓展的更多相关文章
- 中国剩余定理及其拓展 CRT&EXGCD
		中国剩余定理,又叫孙子定理. 作为一个梗广为流传.其实它的学名叫中国单身狗定理. 中国剩余定理 中国剩余定理是来干什么用的呢? 其实就是用来解同余方程组的.那么什么又是同余方程组呢. 顾名思义就是n个 ... 
- BZOJ-1951   古代猪文    (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
		数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ... 
- E - Two Arithmetic Progressions(CodeForces - 710D)(拓展中国剩余定理)
		You are given two arithmetic progressions: a1k + b1 and a2l + b2. Find the number of integers x such ... 
- 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)
		礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ... 
- 拓展中国剩余定理(exCRT)摘要
		清除一个误区 虽然中国剩余定理和拓展中国剩余定理只差两个字,但他俩的解法相差十万八千里,所以会不会CRT无所谓 用途 求类似$$\begin{cases}x \equiv b_{1}\pmod{a_{ ... 
- 中国剩余定理(CRT)及其拓展(ExCRT)
		中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ... 
- [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】
		题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ... 
- 拓展中国剩余定理(ex_crt)
		一般来讲,crt(中国剩余定理)比较常见,而ex_crt(拓展中国剩余定理)不是很常用 但是noi 2018偏偏考了这么个诡异的东西... 所以这里写一个ex_crt模板 模型: 求一个x满足上述方程 ... 
- POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理)
		POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理) 题意分析 不妨设日期为x,根据题意可以列出日期上的方程: 化简可得: 根据中国剩余定理求解即可. 代码总览 #include & ... 
随机推荐
- mysql 5.7.20 server status 是stopped的解决办法
			mysql 5.7.20 server status 是stopped的解决办法 在安装mysql 5.7.20的过程中,前几个过程都没什么问题,但是最后一个步骤就出问题了.当check一直提示con ... 
- API 接口设计工具  --Swagger
			swagger-editor,无法启动GUI软件,在线版的FQ也打不开 null 
- 5. AQS(AbstractQueuedSynchronizer)抽象的队列式的同步器
			5.1 AbstractQueuedSynchronizer里面的设计模式--模板模式 模板模式:父类定义好了算法的框架,第一步做什么第二步做什么,同时把某些步骤的实现延迟到子类去实现. 5.1.1 ... 
- python 计数器Counter
			from collections import Counter colours=( ('Yasoob','Yellow',1), ('Ali','Blue',2), ('Arham','Green', ... 
- linux 输出 之 nl 命令
			1.命令格式:nl [选项]... [文件]... 2.命令参数: -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n): -b t :如果 ... 
- 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础
			最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础,加油吧 距离去北京还有23天 
- 负载均衡服务器中存在大量的TIME_WAIT怎么解决
			首先需要明白什么是TIME_WAIT.TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态.这个状态默认情况下是2倍的MS ... 
- java并发编程 -  Exexctors 工具类
			Executors 类提供了一系列静态工厂方法用于创建各种线程池. newFixedThreadPool 创建固定大小的线程池.每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小.线程池的大 ... 
- bnu 28890 &zoj 3689——Digging——————【要求物品次序的01背包】
			Digging Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on ZJU. Original ID: 36 ... 
- WPF的依赖项属性
			WPF的依赖项属性 属性与事件是.NET抽象模型的核心部分.WPF使用了更高级的依赖项属性(Dependency Property)功能来替换原来.NET的属性,实现了更高效率的保存机制,还添加了附加 ... 
