首页 > 其他分享 >中国剩余定理学习笔记

中国剩余定理学习笔记

时间:2022-12-04 10:35:04浏览次数:58  
标签:剩余 le 定理 笔记 times ans ll equiv

作用

中国剩余定理 (Chinese Remainder Theorem, CRT),也称孙子定理,是用来求解线性同余方程组,即如下面的方程组:

\[\begin{cases} x \equiv &a_1\ ({\rm mod}\ p_1) \\ x \equiv &a_2\ ({\rm mod}\ p_2) \\ & \vdots \\ x \equiv &a_n\ ({\rm mod}\ p_n) \end{cases} \]

这个定理可以在 $O(n \log p) $ 的时间内求解这个方程组的最小整数解,要求 \(p_1,p_2,\dots p_n\) 两两互质。

定理

这个定理告诉我们要怎么求解 \(x\) 的最小正整数值。

实现步骤:

  1. 设 \(M = \displaystyle\prod_{1 \le i \le n} p_i\), 求出 \(M\) 。

  2. 设 \(m_i = \frac{M}{p_i}\) , \(t_i = m_i^{-1} \pmod {p_i}\) ,求出每个 \(m_i\) 。

  3. \(x\) 的一个解是 \(\displaystyle\sum_{1\le i\le n}a_i\times m_i \times t_i\) ,最小的正整数解就是 \(x \bmod M\) 。

证明非常简单,对于任意一个方程 \(x \equiv a_k \pmod {p_k}\) ,除了 \(k\) 以外的所有 \(a_i \times m_i \times m_i^{-1}\) 整除 \(p_k\) ,而 \(a_k \times m_k \times m_k^{-1}\) 在模 \(p_k\) 意义下变为:

\[a_k \times m_k \times m_k^{-1} \equiv a_k \pmod {p_k} \]

得证。

由于求逆元的复杂度是 \(O(\log \sqrt p)\) ( \(\sqrt p\) 是欧拉函数的时间复杂度 ),所以总的时间复杂度是 \(O(n \log p)\) 。

code

int n;
typedef long long ll;
ll p[15] = {0}, a[15] = {0};
ll phi(ll x) {
	ll ans = x;
	for (ll d = 2; x > 1; d++) {
		if (d * d > x)
			return ans / x * (x - 1);
		if (x % d == 0) {
			ans = ans / d * (d - 1);
			while (x % d == 0)
				x /= d;
		}
	}
	return ans;
}
ll fpow(ll a, ll b, ll p) {
	if (b == 0)
		return 1ll;
	ll ans = fpow(a, b / 2, p);
	ans = ans * ans % p;
	if (b % 2 == 1)
		ans = ans * a % p;
	return ans;
}
ll CRT() {
	ll mul = 1;
	for (int i = 1; i <= n; i++)
		mul *= p[i];
	ll ans = 0;
	for (int i = 1; i <= n; i++)
		ans += a[i] * fpow(mul / p[i], phi(p[i]) - 1, p[i]) % mul * (mul / p[i]) % mul, ans %= mul;
	return ans % mul;
}

一些题目

暂时没有。

标签:剩余,le,定理,笔记,times,ans,ll,equiv
From: https://www.cnblogs.com/rlc202204/p/16949465.html

相关文章

  • 威尔逊定理学习笔记
    定理当且仅当\(p\)是质数时,\((p-1)!\equiv-1\pmodp\)。证明首先对于\(p<5\)时,直接证即可。对于\(p\ge5\),分成以下几种情况:\(p\)为合数但不为质数......
  • 卢卡斯定理学习笔记
    内容对于一个质数\(p\),有:\[\LARGEC_n^m\equivC_{[\frac{n}{p}]}^{[\frac{m}{p}]}·C_{n\bmodp}^{m\bmodp}\pmodp\]证明引理:\((1+x)^p\equiv(1+x^p)\pmod......
  • 容斥原理学习笔记
    定义集合两个集合的交集:集合\(A\)与\(B\)的交集可以表示为:\[A\capB=\{x:x\inA\landx\inB\}\]两个集合的并集:集合\(A\)与\(B\)的并集可以表示为:\[A\c......
  • 线性代数学习笔记
    没太听懂的东西初中首先说一下什么是线性。举个例子,一个一次函数\(f(x)=ax+b(a\not=0)\)的函数图像应该是一条直线。同理,函数\(f(x,y)=ax+by+c\)的函数图像也应该......
  • delphi D11编程语言手册 学习笔记(P344-419) 接口/类操作/对象与内存
      这本书可以在Delphi研习社②群256456744的群文件里找到.书名:Delphi11AlexandriaEdition.pdfP344接口与类相比,接口侧重于封装,并提供与类之间一种比......
  • 《Hive性能调优实战》读书笔记
    很不错的一本书。章节划分清晰明了,可根据个人需要读相应的章节。Hive各个方面的知识体系都有涉及。可作为工具书,常读常新,值得翻阅。第2章Hive问题排查与调优思路优化方法PL......
  • Control of Mobile Robots 学习笔记(二、三)Mobile robot, Linear system
    《Controlofmobilerobot》是Gatech的Dr.MagnusEgerstedt在Coursera上发布的一个公开课(现在好像没在Coursera了,这位老师也不在Gatech了)。之前没有自主移动机器人方面......
  • OpenCV3图像处理笔记
    此笔记针对Python版本的opencv3,c++版本的函数和python版本的函数参数几乎一样,只是矩阵格式从ndarray类型变成适合c++的mat模板类型。注意,因为python版本的o......
  • 算法图解笔记
    前言知识第一章,算法简介1.2,二分法查找元素1.2.1,特殊的二分查找第二章,选择排序2.1,内存工作原理2.2.1,链表2.2.2,数组2.2.3,术语2.3,选择排序2.4,小结第......
  • Vue2(笔记16) - Vue核心 - 内置指令
    回顾下之前的指令:v-bind  :单向绑定解析表达式,可简写:xxxv-model:双向数据绑定;v-for   :遍历数组/对象/字符串v-on   :绑定事件监听,可简写 @v-if    :条件......