中国剩余定理(crt)和扩展中国剩余定理(excrt)
数论守门员二号 =。=
中国剩余定理:
1.一次同余方程组:
一次同余方程组是指形如x≡ai(mod mi) (i=1,2,…,k)的同余方程构成的组
中国剩余定理的主要用途是解一次同余方程组,其中m1,m2,...,mk互质
2.中国剩余定理:
令M=m1*m2*...*mk(即所有m的lcm)
ti为同余方程M/mi*ti≡1(mod mi)的最小正整数解
则存在解x=∑ai*M/mi*ti
通解为x+i*M
最小非负整数解为(x%M+M)%M
(我承认这段是抄的orz
原文看起来更方便:https://blog.csdn.net/niiick/article/details/80229217)
M/mi*ti≡1(mod mi)可转化为M/mi*ti+mi*y=1,然后用exgcd求ti
其中gcd(M/mi, mi)=1,意义为方程组一定有解
3.证明:
对于第k个方程
①当i≠k时,有mk|M/mi,即ai*M/mi*ti≡0(mod mk)
②当i=k时,有M/mk*tk≡1(mod mk),即ak*M/mk*tk≡ak(mod mk)
故∑ai*M/mi*ti≡ak(mod mk)
4.代码:
(其中LL是long long,qcm是快速乘)
LL crt(){
LL bwl=;
for(int i=;i<=k;++i){
LL x,y;
exgcd(M/m[i],m[i],x,y);
if(x<) x=x%m[i]+m[i];
bwl=(bwl+qcm(qcm(a[i],M/m[i]),x))%M;
}
return (bwl+M)%M;
}
5.孙子算经:
《孙子算经》:今有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二。问物几何?
《算法统宗》:三人同行七十稀,五树梅花廿一枝,七子团圆月正半,除百零五便得知。
其中70=3*5*2,70%3=1,21=3*7*1,21%5=1,15(半个月)=3*5*1,15%7=1
用70*2+21*3+15*2=233除3*5*7=105,得到的余数23即为答案
70=3*5*2,21=3*7*1,15=3*5*1三式中的最后一个乘数2、1、1即为上文提到的di
数字还挺吉利的233
扩展中国剩余定理:
1.一次同余方程组:
扩展中国剩余定理的主要用途是解一次同余方程组,其中m1,m2,...,mn不一定互质
2.扩展中国剩余定理:
令前k-1个方程组成的同余方程组的一个解为x
且M为前k-1个模数的lcm
则前k-1个方程的方程组的通解为x+i*M
现在将第k个方程加入
只需求一个正整数t,使得
x+t*M≡ak(mod mk)
可以转化为M*t+mk*y=ak-x
然后用exgcd求出t
若此方程无解,则整个同余方程组无解
否则x+t*M为前k个方程的方程组的一个解
(这段也是我抄的,原文和上边一样orz)
3.代码:
(其中LL是long long,qcm是快速乘,三个参数分别为两个乘数和模数)
LL excrt(){
LL M=m[],ans=a[];
for(int i=;i<=k;++i){
LL x,y;
LL d=gcd(M,m[i]);
LL c=(a[i]-ans%m[i]+m[i])%m[i];
if(c%d) return -;
exgcd(M,m[i],x,y);
x=qcm(x,c/d,m[i]/d);
ans+=qcm(x,M,M*m[i]);
M*=m[i]/d;
ans=(ans%M+M)%M;
}
return ans;
}
4.细节:
1.有些题数字卡得严,必须要用快速乘
2.快速乘时注意第二个乘数必须为正,要用通解处理
3.每次快速乘的模数不一定一样,需要好好考虑
例题:
洛谷3868 猜数字
洛谷4777 扩展中国剩余定理
中国剩余定理(crt)和扩展中国剩余定理(excrt)的更多相关文章
- 中国剩余定理(CRT)及其扩展(EXCRT)详解
问题背景 孙子定理是中国古代求解一次同余式方程组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第 ...
- (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)
前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...
- 欧几里得(辗转相除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) & 扩展中国剩余定理(ExCRT)总结
中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
- 中国剩余定理(CRT)及其拓展(ExCRT)
中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ...
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
随机推荐
- css 移动端1px更细
1.最近写项目经常遇到4个入口菜单放在一行,然后加border:1px 在移动端显示却很粗,如下图: <div class="header"> <div clas ...
- flask内置的信号
from flask import Flask,request,template_rendered,render_template,got_request_exception from signals ...
- 阿里云服务器 lnmp安装流程
nginx安装:wget http://nginx.org/download/nginx-1.12.2.tar.gztar zxvf nginx-1.12.2.tar.gzcd nginx-1.12. ...
- (5.13)mysql高可用系列——1主3从复制(SSL)
目录: [0]需求 目前使用Mysql数据库,100GB+数据量,需要实现1主3从环境. 需要实现SSL安全复制,同时需要测试异常宕机切换演练 [1]实验环境 数据库架构:主从复制,基于主库搭建3个从 ...
- windows ping命令
ping -a 192.168.xxx.xxx 解析计算机NetBios名 ping -n 数字 192.168.xxx.xxx 发送指定数量的echo数据包数,默认是四个 ping -l 192 ...
- YAPTCHA(HDU2973)【威尔逊定理】
威尔逊原理.即对于素数p,有(p-1)!=-1( mod p). 首先,将原式变形为[ (3×k+6)! % (3×k+7) + 1] / (3×k+7),所以: 1.3×k+7是素数,结果为1, 2 ...
- raspberrypi 树莓派 内核编译
相关版本信息 硬件:树莓派 2b 目标系统: linux 编译环境:ubuntu 14.4 32bit 用户路径:/home/hi/ 安装交叉编译链 cdmkdir pi/kernelcd pi/ke ...
- T100 —— 凭证打印时排序
capr110_g01,按扣账日期打印排序: 在adzp188——“字段”中加入pmds001的话,产生的代码的变量是:pmds_t_pmds001 :当在“群组”—“印出排序” 再添加pmds001 ...
- 《深入实践C++模板编程》之六——标准库中的容器
1.容器的基本要求 a.并非所有的数据都可以放进容器当中.各种容器模板对所存数据类型都有一个基本要求——可复制构造.将数据放进容器的过程就是通过数据的复制构造函数在容器内创建数据的一个副本的过程. b ...
- ef core schema 指定架构
不知道很少使用Schema模型还是怎么,居然搜帖子没人说,虽然很简单但是还是想记录一下坑 命名空间 using System.ComponentModel.DataAnnotations.Schema ...