数论守门员二号 =。=

中国剩余定理:

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. Vue-cli3性能优化

    Vue-cli3.0的打包性能优化方案:https://juejin.im/post/5d42962be51d4561b84c00c3 提升90%加载速度——vuecli下的首屏性能优化:https: ...

  2. Linux题型

    考试题: 1.请描述下列路径的内容是做什么的? /etc/sysctlconf    --------------------------   内核配置(内核优化) /etc/rc.local    ...

  3. C# Excel 中设置文字对齐方式、方向和换行

    在Excel表格中输入文字时,我们常常需要调整文字对齐方式或者对文字进行换行.本文将介绍如何通过编程的方式设置文字对齐方式,改变文字方向以及对文字进行换行. //创建Workbook对象 Workbo ...

  4. Linux系列:之软件安装

    1.安装软件 不同的Linux版本可能使用不同的软件管理机制. RPM:使用这类命令进行安装的Linux版本有CentOS. DPKG:使用这类命令进行安装的Linux版本有Debian.Ubuntu ...

  5. 简单实现JDBC自动加载驱动,简化数据连接和关闭数据库连接

    package util; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import j ...

  6. php网络请求

    get请求 /** * get请求 * @param $url,请求地址 * @return bool|string */ function getRequest($url){ $headerArra ...

  7. Python学习笔记:流程控制

    单分支: if 条件: 满足条件后执行的代码 程序举例: leiyu=28if leiyu > 22: print("You can find girl friend..." ...

  8. package[golang]学习笔记之runtime

    *获取当前函数名称,文件名称,行号等信息.通过这个函数配合Println函数可以方便的获取错误信息的位置 var n int //n==0 当前 //n==1 调用函数 //n==2 调用函数的调用函 ...

  9. 小米soar

    SOAR 简介 SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能优化与改写工具,由小米运维 DBA 团队出品 SOAR 体系架构 SOAR主要由语法解析器,集成 ...

  10. (转)关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。

    ( 转载请务必标明出处:http://www.cnblogs.com/linguanh/, 本文出自:[林冠宏(指尖下的幽灵)的博客]) 前序 本文将会把一下三个问题阐述清楚以及一个网上的普遍观点的补 ...