首页 > 其他分享 >扩展中国剩余定理(Excrt)笔记

扩展中国剩余定理(Excrt)笔记

时间:2023-12-23 09:00:12浏览次数:32  
标签:begin end 定理 方程 笔记 Excrt cases equiv mod

扩展中国剩余定理(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 合并。

标签:begin,end,定理,方程,笔记,Excrt,cases,equiv,mod
From: https://www.cnblogs.com/LcyRegister/p/17922691.html

相关文章

  • PySide6学习笔记(一)VSCode配置
    vscode配置(windows)在vscode中安装Python与QTforPython和coderunner插件(推荐)   Python与QTforPython插件开发PySide必备coderunner(可以右键运行py文件)安装PySide6pipinstallPySide6配置QTforpython插件 点击插件设置-拓展设置找到......
  • openGauss学习笔记-169 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用
    openGauss学习笔记-169openGauss数据库运维-备份与恢复-导入数据-更新表中数据-使用DML命令更新表openGauss支持标准的数据库操作语言(DML)命令,对表进行更新。169.1操作步骤假设存在表customer_t,表结构如下:CREATETABLEcustomer_t(c_customer_skinteger,......
  • python自动化学习笔记5-----allure测试报告
    1、运行测试报告 2、allure注解的使用  3、优化测试报告之添加对应的标签 4、注解的使用     5、yaml文件格式 6、更改logo(1)allure目录下找到allure.yml的文件,增加插件    (2)在插件目录下添加要展示的图片    (3)修改styles.cs......
  • python自动化学习笔记6-----jekins环境搭建及使用
        msi版本安装后,要去电脑服务里面设置为自启动,否则重启电脑后使用不了。  web自动化1、实现linux部署jekins,window运行自动化代码,不在同一个机器上运行在执行机(自己的电脑上)访问jekins网址进行相应设置        运行后,进行连接,连接成功后,小......
  • python自动化学习笔记4-----pytest单元测试框架
            ......
  • 《需求分析与系统设计》读书笔记3
      从第八章《数据库设计》中总结了一下知识内容:类模型和BCED类包反映了应用类,而不是存储数据库结构,实体类表示了应用中的永久数据库对象,但不是数据库中的永久类;永久数据库层可以是关系数据库,对象关系数据库或者对象数据库;数据库模型是表示数据库结构的这种抽象,包含三种抽象,分别......
  • Kruskal重构树学习笔记
    挺简单的知识点(?)概念首先Kruskal算法是用来求最小生成树的算法之一,其思想是贪心。而Kruskal重构树就是将整张图重建为二叉树。在跑Kruskal的过程中我们会从小到大加入若干条边。现在我们仍然按照这个顺序。首先新建\(n\)个集合,每个集合恰有一个节点,点权为\(0\)。每......
  • 机器学习笔记(二)使用paddlepaddle,再探波士顿房价预测
    目标用paddlepaddle来重写之前那个手写的梯度下降方案,简化内容流程实际上就做了几个事:数据准备:将一个批次的数据先转换成nparray格式,再转换成Tensor格式前向计算:将一个批次的样本数据灌入网络中,计算出结果计算损失函数:以前向计算的结果和真是房价作为输入,通过算是函数sqare......
  • Burnside 引理 与 Pólya 定理 学习笔记
    为了防止明天就把好不容易听完的东西都还给rabbit_lb了,还是记一点吧。1.群论基础1.1群(group)的定义给定集合\(G\)和\(G\)上的二元运算\(\cdot\),满足下列条件称之为群:封闭性:若\(a,b\inG\),则\(a\cdotb\inG\)。结合律:对于任意\(a,b,c\inG\),有\((a\cdotb)\cd......
  • 机器学习笔记(一)从波士顿房价预测开始,梯度下降
    从波士顿房价开始目标其实这一章节比较简单,主要是概念,首先在波士顿房价这个问题中,我们假设了一组线性关系,也就是如图所示我们假定结果房价和这些参数之间有线性关系,即:然后我们假定这个函数的损失函数为均方差,即:那么就是说,我们现在是已知y和x,来求使得这个损失函数Loss最小......