扩展中国剩余定理(excrt)

本来应该先学中国剩余定理的。但是有了扩展中国剩余定理,朴素的 CRT 就没用了。

扩展中国剩余定理用来求解如下形式的同余方程组:

\[\begin{cases} x \equiv a_1\ ({\rm mod}\ b_1) \\ x\equiv a_2\ ({\rm mod}\ b_2) \\ ... \\ x \equiv a_n\ ({\rm mod}\ b_n)\end{cases}
\]

扩展中国剩余定理的基本思想是合并,通过 \(n - 1\) 次合并,将一个大的同余方程组合并成一个同余方程。

假设现在有两个同余方程:

\[\begin{cases} x \equiv a\ ({\rm mod}\ A) \\ x\equiv b\ ({\rm mod}\ B) \end{cases}
\]

现在要将他们合并。首先转化成不定方程:

\[\Rightarrow \begin{cases} A | (x - a) \\ B | (x - b) \end{cases}
\]
\[\Rightarrow \begin{cases} x - a = Ak_1 \\ x - b = Bk_2 \end{cases}
\]
\[\Rightarrow \begin{cases} x = a + Ak_1 \\ x = b + Bk_2 \end{cases}
\]
\[\Rightarrow a + Ak_1 = b + Bk_2
\]
\[\Rightarrow Ak_1 - Bk_2 = b - a
\]

成功转化成了系数为 \((A, -B, b - a)\) 的不定方程,使用 exgcd 求出他的一个根。因此转化成了一个同余方程:\(x \equiv Ak_1 + a (\bmod \ \text{lcm}(A, B))\)。合并完成。

// 合并 x = a(mod A), x = b(mod B) 两个方程
// 返回的是新的 a', b',满足 x = a'(mod b')
PII merge(int a, int A, int b, int B) {
int k1, k2; int d = exgcd(k1, k2, A, B);
k1 = k1 * (b - a) / d;
int p = A / d * B; return {(A * k1 + a) % p, p};
}

bonus:

  1. 如果 \(x\) 的系数不为 \(1\)。

也就是 P4774 [NOI2018] 屠龙勇士

求解形如:

\[\begin{cases} p_1 x \equiv a_1\ ({\rm mod}\ b_1) \\ p_2 x\equiv a_2\ ({\rm mod}\ b_2) \\ ... \\ p_n x \equiv a_n\ ({\rm mod}\ b_n)\end{cases}
\]

Excrt 因为 \(x\) 的系数是一,因此可以直接联立两个不定方程。也尝试将这个东西转化成不定方程的形式。假设现在需要合并的两个同余方程是:

\[\begin{cases} px \equiv a (\bmod \ b) \\ Px \equiv A(\bmod \ B)\end{cases}
\]
\[\Rightarrow \begin{cases} b | (px - a) \\ B | (Px - A) \end{cases}
\]
\[\Rightarrow \begin{cases} px - a = k_1 b \\ Px - A = k_2 B \end{cases}
\]
\[\Rightarrow \begin{cases} px - k_1 b = a \\ Px - k_2 B =A\end{cases}
\]

然后发现两个 \(x\) 的系数不同,不能直接合并了。而这两个柿子两边又不能同时除以 \(p\) 或者 \(P\),因为不保证逆元存在。这就非常难搞。

一个神奇的思路是直接解出两个方程。以第一个方程为例,方程中只有两个未知数 \(x\) 和 \(-k_1\),可以解出一个特解 \(x_0\)。那么所有 \(x\) 就可以表示成:

\[x = x_0 + \dfrac{b}{(p, b)} \times \alpha
\]

同理解第二个方程,可以得到

\[x = x_1 + \dfrac{B}{(P, B)} \times \beta
\]

我们惊奇的发现这两个 \(x\) 的系数相同了。所以可以合并一下:

\[x_0 + \dfrac{b}{(p, b)} \times \alpha = x_1 + \dfrac{B}{(P, B)} \times \beta
\]

里面只有 \(\alpha, \beta\) 两个未知数,解出他们两个就可以得到 \(x\)。

  1. 扩展中国定理进行模数非质数的合并

古代猪文

求 \(\dbinom{n}{m} \bmod \ 999911658\) 的值。

将 \(999911658\) 质因数分解得到:\(999911658 = 2 \times 3 \times 4679 \times 35617\)。

因此可以对 \(2, 3, 4679, 35617\) 分别做一遍 \(\text{Lucas}\),得到下面的同余方程:

\[\begin{cases}
x \equiv a_1(\bmod \ 2) \\
x \equiv a_2(\bmod \ 3) \\
x \equiv a_3(\bmod \ 4679) \\
x \equiv a_4(\bmod \ 35617) \\
\end{cases}\]

可以直接用 excrt 合并一下。

另外一个应用是扩展卢卡斯。其基本思路也是将模数拆成若干质因数的次方,计算后 excrt 合并。

扩展中国剩余定理(Excrt)笔记的更多相关文章

  1. 扩展中国剩余定理 (ExCRT)

    扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...

  2. 扩展中国剩余定理 (exCRT) 的证明与练习

    原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...

  3. 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...

  4. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

  5. 扩展中国剩余定理(EXCRT)快速入门

    问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...

  6. 扩展中国剩余定理学习笔记+模板(洛谷P4777)

    题目链接: 洛谷 题目大意:求同余方程组 $x\equiv b_i(mod\ a_i)$ 的最小正整数解. $1\leq n\leq 10^5,1\leq a_i\leq 10^{12},0\leq ...

  7. 扩展中国剩余定理(EXCRT)学习笔记

    扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...

  8. P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers

    P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...

  9. P4777 【模板】扩展中国剩余定理(EXCRT)

    思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...

  10. P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT

    EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (100)-- 算法导论9.3 6题

    六.用go语言,对一个包含n个元素的集合来说,k分位数是指能把有序集合分成k个等大小集合的第k-1个顺序统计量.给出一个能找出某一集合的k分位数的 O(nlgk)时间的算法. 文心一言: 要找到一个集 ...

  2. 前端三件套系例之JS——JavaScript基础、JavaScript基本数据类型、JavaScript函数

    文章目录 1 JavaScript基础 1.JavaScript是什么 2.JavaScript介绍 2-1 ECMAScript和JavaScript的关系 2-2 ECMAScript的历史 3. ...

  3. 手敲,Ascend算子开发入门笔记分享

    本文分享自华为云社区<Ascend算子开发入门笔记>,作者: JeffDing . 基础概念 什么是Ascend C Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和 ...

  4. CF1854E Games Bundles 题解

    乱搞题 设个 \(dp[i]\) 表示和为 \(i\) 的子序列个数,那么转移是容易的, \(dp[j]+=dp[j-i]\) ,然后就判下 \(dp[60]+dp[60-i]\) 是否大于 \(m\ ...

  5. 在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentModificationException 异常)

    http://www.iteye.com/topic/124788 http://www.blogjava.net/EvanLiu/archive/2008/08/31/224453.html

  6. Nebula Graph开源分布式图数据库,万亿级数据,毫秒级延时

    推荐一个分布式图数据库Nebula Graph,万亿级数据,毫秒级延时 什么是Nebula Graph Nebula Graph 是一款开源的.分布式的.易扩展的原生图数据库,能够承载包含数千亿个点和 ...

  7. jap复制一条数据插入数据库,报:identifier of an instance of com.kxkd.shop.entity.goods.GoodsSpu was alt

    因为修改了jpa实体id 可以先使用springframework的BeanUtils复制一个相同的对象 BeanUtils.copyProperties(source, target); //复制属 ...

  8. 【源码解读(二)】EFCORE源码解读之查询都做了什么以及如何自定义批量插入

    引言 书接上回,[源码解读(一)]EFCORE源码解读之创建DBContext查询拦截,在上一篇文章中,主要讲了DBContext的构造函数,以及如何缓存查询方法提升查询性能,还有最重要的拦截查询,托 ...

  9. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-32-JavaScript的调用执行-下篇

    1.简介 在实际工作中,我们需要对处理的元素进行高亮显示,或者有时候为了看清楚操作过程和步骤我们需要跟踪鼠标点击了哪些元素需要标记出来.虽然很少遇到,但是为了以后大家可以参考或者提供一种思路,今天宏哥 ...

  10. 随机森林(Random Forest)--- 转载

    1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...