数论守门员二号 =。=

中国剩余定理:

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)的更多相关文章

  1. 中国剩余定理(CRT)及其扩展(EXCRT)详解

    问题背景   孙子定理是中国古代求解一次同余式方程组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第 ...

  2. (伪)再扩展中国剩余定理(洛谷P4774 [NOI2018]屠龙勇士)(中国剩余定理,扩展欧几里德,multiset)

    前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个 ...

  3. 欧几里得(辗转相除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* ...

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

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

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

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

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

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

  7. 中国剩余定理(CRT)及其拓展(ExCRT)

    中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ...

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

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

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

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

随机推荐

  1. harbor API 与tag 清理

    harbor API 官方swagger swagger在线查看 harbor tag 清理 python程序 import requests import json class RequestCli ...

  2. Tensorflow之实现物体检测

    目录 项目背景 TensorFlow介绍 环境搭建 模型选用 Api使用说明 运行路由 小结 项目背景 产品看到竞品可以标记物体的功能,秉承一贯的他有我也要有,他没有我更要有的作风,丢过来一网站,说这 ...

  3. mysql数据库之函数、流程控制

    函数 注意与存储过程的区别,mysql内置的函数只能在sql语句中使用! 参考博客:http://www.cnblogs.com/linhaifeng/articles/7495918.html#_l ...

  4. python使用xlutils库save()之后,文件损坏

    import xlrd from xlutils.copy import copyworkbook=xlrd.open_workbook('test.xlsx')##打开excel为 .xlsx格式w ...

  5. 从入门到自闭之Python--MySQL数据库的单表操作

    单表查询:select * from 表 where 条件 group by 分组 having 过滤 order by 排序 limit n; 语法: select distinct 字段1,字段2 ...

  6. springboot实现上传并解析Excel

    添加pom依赖 <!-- excel解析包 --> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> ...

  7. MouseMoveEvent为了不太耗资源在默认状态下是要鼠标按下才能捕捉到。要想鼠标不按下时的移动也能捕捉到,需要setMouseTracking(true)

    最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下. 在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资 ...

  8. 嵌入式Linux的计划任务,发送请求记录

  9. 15-Perl 格式化输出

    1.Perl 格式化输出Perl 是一个非常强大的文本数据处理语言.Perl 中可以使用 format 来定义一个模板,然后使用 write 按指定模板输出数据.Perl 格式化定义语法格式如下:fo ...

  10. 7-Perl 数组

    1.Perl 数组Perl 数组一个是存储标量值的列表变量,变量可以是不同类型.数组变量以 @ 开头.访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取,实例如下:#!/usr/bin/p ...