孙子定理及扩展孙子定理

中国剩余定理 (Chinese Remainder Theorem)

CRT是解决下列同余方程问题的,mi,mjm_i,m_jmi​,mj​两两互质。

该定理只需要用到两个取余知识点:

1.a%b=c→(a+kb)%b=ca\%b=c\rightarrow (a+kb)\%b=ca%b=c→(a+kb)%b=c

2.a%b=c→(ka)%b=kc(kc<b)a\%b=c\rightarrow (ka)\%b=kc\ (kc<b)a%b=c→(ka)%b=kc (kc<b)

该问题当模数两两互质必有解。

令MiM_iMi​是除了mim_imi​之外的所有mjm_jmj​的lcm=∏j=1nm[j]m[i]lcm=\dfrac{\prod\limits_{j=1}^nm[j]}{m[i]}lcm=m[i]j=1∏n​m[j]​。

令Mit≡1(modmi)M_it\equiv 1\pmod{m_i}Mi​t≡1(modmi​)

⇒Mit+miy=1\Rightarrow M_it+m_iy=1⇒Mi​t+mi​y=1

由exgcdexgcdexgcd可解出ttt。

这个满足x≡ai(modmi)x\equiv a_i\pmod{m_i}x≡ai​(modmi​)的式子,我们先找到该式余1的解:MitM_itMi​t。

然后由知识222可得,ai×Mi×t(modmi)=aia_i\times M_i\times t\pmod{m_i}=a_iai​×Mi​×t(modmi​)=ai​

最后的答案就是:∑i=1naiMiti(modM)\sum\limits_{i=1}^n a_iM_it_i\pmod{M}i=1∑n​ai​Mi​ti​(modM)

该解是最小正整数解。

代码

void exgcd(ll a,ll b,ll &x,ll &y){//ax+by=1if(!b){x=1,y=0;return;}exgcd(b,a%b,y,x); y-=(a/b)*x;
}
ll m[N],a[N];//m[i] modulus (relatively prime) a[i] remainder
ll crt(int n){ //Chinese Remainder Theorem  (nlogM)ll M=1;//product of modulusfor(int i=1;i<=n;i++)scanf("%lld%lld",&m[i],&a[i]),M*=m[i];ll ans=0;for(int i=1;i<=n;i++){ll x,y;ll u=M/m[i];// Inverseexgcd(u,m[i],x,y);// ux+m[i]y=1ans=(ans+1LL*a[i]*u*x%M)%M; //sum of a[i]*u*x}return (ans%M+M)%M;//Minimum positve integer
}

扩展中国剩余定理

假设我们已经求出前i−1i-1i−1个方程的解xxx,且令M=lcm{mj}j∈[1,i−1]M=lcm\{m_j\} j\in[1,i-1]M=lcm{mj​}j∈[1,i−1]

则xxx的通解为:x+kMx+kMx+kM

对于第iii个方程:(x+kM)≡ai(modmi)(x+kM)\equiv a_i\pmod{m_i}(x+kM)≡ai​(modmi​)

即:kM=(ai−x)(modmi)kM=(a_i-x)\pmod{m_i}kM=(ai​−x)(modmi​)

kM+miy=(ai−x)kM+m_iy=(a_i-x)kM+mi​y=(ai​−x)

由exgcdexgcdexgcd可解得:kkk。

所以前iii个方程的解x′=x+kMx'=x+kMx′=x+kM,然后更新M=lcm(M,mi)M=lcm(M,m_i)M=lcm(M,mi​)进入下个方程即可。

代码

ll exgcd(ll a,ll b,ll &x,ll &y){//ax+by=1if(!b){x=1,y=0;return a;}ll g=exgcd(b,a%b,y,x); y-=(a/b)*x;return g;
}
ll qmul(ll a,ll b,ll m){ll s=0;while(b){if(b&1) s=(s+a)%m;a=(a+a)%m;b>>=1;}return s;
}
ll m[N],a[N];//m[i] modulus (relatively prime) a[i] remainder
ll excrt(int n){ //Chinese Remainder Theorem  (nlogM)ll M=1,ans=0;//product of modulusfor(int i=1;i<=n;i++){ll x,y,c=(a[i]-ans%m[i]+m[i])%m[i];ll g=exgcd(M,m[i],x,y);if(c%g) return -1;//no answerll g1=m[i]/g,g2=c/g;x=qmul(x,g2,g1);ans+=x*M;M*=g1;ans=(ans%M+M)%M;}return (ans%M+M)%M;//Minimum positve integer
}

Hint

求 {kix=ai(modmi)}\{k_ix=a_i\pmod{m_i}\}{ki​x=ai​(modmi​)}

类似excrtexcrtexcrt

已知前i−1i-1i−1个方程的通解:x+tMx+tMx+tM

则ki(x+tM)=ai(modmi)k_i(x+tM)=a_i\pmod{m_i}ki​(x+tM)=ai​(modmi​)

(kiM)t+miy=ai−kix(k_iM)t+m_iy=a_i-k_ix(ki​M)t+mi​y=ai​−ki​x

由exgcdexgcdexgcd可解得ttt。

因此可求出xxx。


记忆方法

上述两个定理的关键都是:mix+Miy=cm_ix+M_iy=cmi​x+Mi​y=c 解出xxx。

一个是:Mix+miy=1M_ix+m_iy=1Mi​x+mi​y=1

ans=∑aiMix(modM)ans=\sum a_iM_ix \pmod{M}ans=∑ai​Mi​x(modM)

一个是:Mix+miy=(ai−ans)M_ix+m_iy=(a_i-ans)Mi​x+mi​y=(ai​−ans)

ans=∑Mix(modM)ans=\sum M_ix \pmod{M}ans=∑Mi​x(modM)


参考文章

具体证明可参考这篇文章

传送门

传送门


习题

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

P1495 【模板】中国剩余定理(CRT)/曹冲养猪

ABC 193 E(EXCRT 板子)

POJ 1006 (CRT 板子)

孙子定理及扩展孙子定理相关推荐

  1. 组合数学 —— 组合数取模 —— 卢卡斯定理与扩展卢卡斯定理

    [卢卡斯定理] 1.要求:p 是质数,m.n 很大但 p 很小 或者 n.m 不大但大于 p 2.定理内容 其中, 3.推论 当将 n 写成 p 进制:,将 m 写成 p 进制: 时,有: 4.实现 ...

  2. lucas定理及扩展lucas定理

    还有一篇关于lucas定理的比较好的文章:关于LUCAS二项式系数同余定理的一些推广 转载原文链接:http://www.cnblogs.com/jianglangcaijin/p/3446839.h ...

  3. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)

    J. Ceizenpok's formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  4. 『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理

    组合数: 在N个数中选取M个数,问选的方式有几种? 直接递归暴力简单 #include<cstdio> const int N = 2000 + 5; const int MOD = (i ...

  5. P4720 【模板】扩展卢卡斯定理/exLucas(无讲解,纯记录模板)

    P4720 [模板]扩展卢卡斯定理/exLucas 题意: CnmmodpC_{n}^{m}\bmod pCnm​modp 对于 100% 的数据,1≤m≤n≤1018,2≤p≤106,不保证 p 是 ...

  6. 洛谷 P4720 【模板】扩展卢卡斯定理/exLucas

    [模板]扩展卢卡斯定理/exLucas 题目背景 这是一道模板题. 题目描述 求 Cnmmodp{\mathrm{C}}_n^m \bmod{p}Cnm​modp 其中 C\mathrm{C}C 为组 ...

  7. 裴蜀定理与扩展欧几里德算法

    裴蜀定理又称贝祖定理:对于给定的正整数a,b,方程ax+by=c有解的充要条件为c是gcd(a,b)的整数倍. 裴蜀定理的推广:方程ax+by+cz+-+nm=f(其中a,b,c-n,f为整数)有解的 ...

  8. 【知识总结】扩展卢卡斯定理(exLucas)

    扩展卢卡斯定理用于求如下式子(其中 p p p不一定是质数): C n m m o d p C_n^m\ mod\ p Cnm​ mod p 我们将这个问题由总体到局部地分为三个层次解决. 层次一:原 ...

  9. 【数学】扩展卢卡斯定理

    Description 求 ( n m ) m o d p \dbinom{n}{m}\bmod p (mn​)modp 其中 p p p 较小且 不保证 p p p 是质数. Method 前置芝士 ...

最新文章

  1. 慕课网_《Java微信公众号开发进阶》学习总结
  2. 使用火炬之光资源(转)
  3. spring boot + spring cloud 基础架构设计
  4. Linux学习笔记-基本操作2
  5. python解析html模块_Python HTMLParser模块解析html获取url实例
  6. ITK:计算CovariantVector的范数并将其标准化
  7. go语言1.4版本将支持面向android开发,[翻译]Go语言1.4版本将支持面向Android开发
  8. [UE4]C++中extern关键字浅谈
  9. CentOS 6 下升级安装Mysql 5.5 完整步骤
  10. windows下springboot项目部署elk日志系统教程elasticsearch与logstash与kibana
  11. TypeScript -脚本编程语言
  12. 010 Editor for Mac(十六进制编辑器)
  13. Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
  14. ActiveReports 9 新功能:创新的报表分层设计理念
  15. 详解Visual Studio 2010中ASP.NET新增23项功能 转
  16. Ajax异步刷新,测试用户名是否被注册
  17. 如何让千牛工作台/阿里旺旺不要自动升级
  18. android微信分享成功后回调,微信分享成功后回调问题
  19. 显示器3d测试软件,IPS显示屏/裸眼3D显示原理及3D应用
  20. Discuz集思街淘宝客模板 程序源代码

热门文章

  1. 如何在Boxee中管理电影
  2. 《扬帆优配》互联互通扩容提升港股市场活力
  3. 解密Word文档密码,轻松解密办法!
  4. 【MySQL学习】认识MySQL数据库
  5. 《Web安全之机器学习入门》笔记:第十六章 16.3 恶意评论识别(二)
  6. HTTPS篇之SSL握手过程详解
  7. 数据结构—线性表的顺序存储
  8. JavaScript-1:JavaScript简介
  9. 查询优化(TTFB过长)left join索引未生效
  10. 【Verilog基础】锁存器(Latch)知识点总结