也许更好的阅读体验

文章目录

  • 前置知识
  • 中国剩余定理(CRT)
    • 目的
    • 求法
    • Code
  • 扩展中国剩余定理(EXCRT)
    • 目的
    • 解法
    • code

前置知识

快速乘
扩展欧几里得定理
同余方程

中国剩余定理(CRT)

目的

求最小的正整数 x x x,使其满足

{ x ≡ a 1 ( m o d m ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) \begin{cases} x\equiv a_{1}\left( mod\ m\right) \\ x\equiv a_{2}\left( mod\ m_{2}\right) \\ \vdots \\ x\equiv a_{n}\left( mod\ m_{n}\right) \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​x≡a1​(mod m)x≡a2​(mod m2​)⋮x≡an​(mod mn​)​

其中 m 1 , m 2 … m n m_1,m_2\dots m_n m1​,m2​…mn​互质

求法

令 M = ∏ i = 1 n m i \begin{aligned}M=\prod ^{n}_{i=1}m_{i}\end{aligned} M=i=1∏n​mi​​

设 ω i = M m i \omega _{i}=\dfrac {M}{m_{i}} ωi​=mi​M​

ω i − 1 \omega_i^{-1} ωi−1​为 ω i \omega_i ωi​在 m o d m i mod\ m_i mod mi​下的逆元

则有
x = ∑ i = 1 n a i ω i ω i − 1 m o d M \begin{aligned}x=\sum ^{n}_{i=1}a_{i}\omega_{i}\omega_{i}^{-1} mod\ M\end{aligned} x=i=1∑n​ai​ωi​ωi−1​mod M​

当对 m i m_i mi​取模时,除了有 ω i \omega_i ωi​的项,其余项都是 m i m_i mi​的倍数,也就是说它们 m o d m i mod\ m_i mod mi​是为 0 0 0的,最后得到的结果就是 a i a_i ai​

m 1 , m 2 … m n m_1,m_2\dots m_n m1​,m2​…mn​互质
为了保证是最小正整数解,我们乘以 ω i \omega_i ωi​的逆元,这样保证了其不会过大

Code

#define ll long long
#define ull unsigned long longvoid ex_gcd (ll a,ll b,ll &x,ll &y)
{if (!b){   x=1,y=0;return;}ex_gcd(b,a%b,x,y);int tmp=x;x=y,y=tmp-a/b*y;
}ll mul (ll x,ll y,const ll mod)//快速乘
{x%=mod,y%=mod;ll z=(long double)x*y/mod;ll ans=(ull)x*y-(ull)z*mod;return (ans+mod)%mod;
}ll crt (int *a,int *m,int n)
{ll M=1,ans=0;for (int i=1;i<=n;++i)   M*=m[i];for (int i=1;i<=n;++i){ll ni,jk;ex_gcd(M/m[i],m[i],ni,jk);//ni 逆元ans=(ans+mul(mul(M/m[i],a[i],M),ni,M))%M;}return ans;
}

扩展中国剩余定理(EXCRT)

目的

求最小的正整数 x x x,使其满足

{ x ≡ a 1 ( m o d m ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) \begin{cases} x\equiv a_{1}\left( mod\ m\right) \\ x\equiv a_{2}\left( mod\ m_{2}\right) \\ \vdots \\ x\equiv a_{n}\left( mod\ m_{n}\right) \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​x≡a1​(mod m)x≡a2​(mod m2​)⋮x≡an​(mod mn​)​

其中 m 1 , m 2 … m n m_1,m_2\dots m_n m1​,m2​…mn​不一定互质

解法

对于 C R T CRT CRT而言,这里的条件变为 m m m之间可以不互质了
显然是不能向原来那样直接求了
考虑已经知道了前 i − 1 i-1 i−1个方程的答案 x x x
设前 i − 1 i-1 i−1个 m m m的最小公倍数 l c m ( m 1 , m 2 … m i − 1 ) = M lcm(m1,m2\dots m_{i-1})=M lcm(m1,m2…mi−1​)=M
现在考虑第 i i i个方程
x ≡ a i ( m o d m i ) x\equiv a_i\left(mod\ m_i\right) x≡ai​(mod mi​)
我们知道前 i − 1 i-1 i−1个方程的最小解为 x x x,那么其通用解就是 x + k M x+kM x+kM
因为 k M kM kM对前 i − 1 i-1 i−1个 m m m取模肯定是等于 0 0 0的
那么考虑了第 i i i个方程后的解应也是如上的一个形式
就设为 x + k M x+kM x+kM吧
那么我们就是要求关于 k k k的这样的方程
k M + x ≡ a i ( m o d m i ) kM+x\equiv a_i\left(mod\ m_i\right) kM+x≡ai​(mod mi​)
其中 x , a i , m i x,a_i,m_i x,ai​,mi​都是已知的
这就是一个简单的同余方程了
k M − p m i = a i − x kM-pm_i=a_i-x kM−pmi​=ai​−x
其中两个未知数 k , p k,p k,p
用 e x _ g c d ex\_gcd ex_gcd求解即可
无解条件就是上述方程无解

code

#define ll long long
#define ull unsigned long longll ex_gcd (ll a,ll b,ll &x,ll &y)
{if (!b){   x=1,y=0;return a;}ll g=ex_gcd(b,a%b,x,y);int tmp=x;x=y,y=tmp-a/b*y;return g;
}ll mul (ll a,ll b,ll mod)//快速乘
{a%=mod,b%=mod;ll c=(long double)a*b/mod;ll ans=(ull)a*b-(ull)c*mod;return (ans+mod)%mod;
}ll ex_crt (ll *a,ll *m,int n)
{ll ans=a[1]%m[1],M=m[1];for (int i=2;i<=n;++i){ll gcd,x,y,c=(a[i]%m[i]-ans%m[i]+m[i])%m[i];gcd=ex_gcd(M,m[i],x,y);if (c%gcd)   return -1;x=mul(x,c/gcd,m[i]/gcd);ll lm=M;M=M/gcd*m[i];ans=((ans+mul(x,lm,M)%M)%M+M)%M;}return ans;
}

如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧

中国剩余定理和扩展中国剩余定理相关推荐

  1. 中国剩余定理 扩展中国剩余定理

    一.中国剩余定理 对于 x ≡ a1(mod m1) x ≡ a2(mod m2) x ≡ a3(mod m3) ---- 且 m1 m2 m3-两两互质 此时可运用中国剩余定理 首先求出 s=m1m ...

  2. 中国剩余定理扩展中国剩余定理

    中国剩余定理(CRT): 若 m1, m2,...,mk  两两互质,则同余方程组 x≡a1 (mod m1) x≡a2 (mod m2) ------- x≡ak (mod mk) 有整数解,解为 ...

  3. 中国剩余定理与扩展中国剩余定理

    中国剩余定理又名孙子定理 用来求解同余线性方程组 其中m1,m2,m3-两两互质,求x的最小整数解: 设M为m1,m2,m3-的公倍数. 根据上面的推导,为什么x的通解形式是累加呢? 根据上面推导,推 ...

  4. 中国剩余定理及扩展中国剩余定理

    目录 中国剩余定理CRT 扩展中国剩余定理ExCRT TJOI2009 猜数字 HDU 1573 X问题 中国剩余定理CRT 中国剩余定理是用来求线性同于方程组的. \[ \begin{aligned ...

  5. 博客处女作:中国剩余定理与扩展中国剩余定理

    各位好啊,这里是蒟蒻gigo_64的第一篇博客,,这里我们开始啦. 本文需要读者知晓扩展欧几里得,如果不会请点击这个大佬的链接;https://blog.csdn.net/sslz_fsy/artic ...

  6. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  7. 与数论的厮守04:扩展中国剩余定理

    根据数论的尿性,一般的定理解决不了的问题怎么办?那就拓展一下呗. 我们先看中国剩余定理,它解决的是一堆同余方程:nΞa1(mod b1),nΞa2(mod b2)...nΞak(mod bk),其中b ...

  8. 中国剩余定理/扩展中剩余定理

    中国剩余定理 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问题 ...

  9. 中国剩余定理拓展中国剩余定理

    复习 中国剩余定理: x ≡ a 1 ( m o d m 1 ) x ≡a_1(mod m_1) x≡a1​(modm1​) x ≡ a 2 ( m o d m 2 ) x ≡a_2(mod m_2) ...

最新文章

  1. “计量确认”与“检定”之区别
  2. Python 基础教程:位运算的奥妙
  3. 超全流程-idea对springboot+ssm的部署实现增删改查
  4. 平台日志架构说明log4j漏洞问题解析
  5. 在线学ajax,ajax学习
  6. Python中的魔法方法
  7. flutter怎么添加ios网络权限_视频号直播间怎么添加购物车商品;超详细流程步骤。丨国仁网络资讯...
  8. Spring Boot 你所不知道的超级知识学习路线清单
  9. 推荐算法工程师必备!!!协同过滤推荐算法总结
  10. jQuery核心函数
  11. 对有父子关系的层级数据项,递归实现绑定到ListControl进行树状列表化的分层输出...
  12. matlab中的全局参量,matlab参数传递及全局变量 | 学步园
  13. BAT 批处理注释命令rem、@rem和::
  14. matlab基因频率是看最大值吗,基于ICA的语音信号盲分离
  15. 红外检测传感器的C语言,基于51单片机的红外反射式光电传感器测速机的简易设计...
  16. Oliver的成绩(vector)
  17. 怎么解决服务器延迟问题
  18. 笨办法学python练习35分支与函数
  19. Office文档在线编辑
  20. android 背景色阴影,Android 阴影背景的四种实现方式

热门文章

  1. 【收藏】2020年Python量化文章合辑
  2. C# 2012QQ空间最新加密方式
  3. JSP页面查询显示常用模式
  4. 小程序文本输入,中英文输入的一个不起眼小坑
  5. 软件压力测试图片60张,Win10 64位用鲁大师界面cpu温度60上下,显卡40多。用压力测试7-8分钟cpu75左右,...
  6. 3DMAX快捷键整理
  7. 公共号码池redis实现方案
  8. 数车计算机编程教学caxa,CAXA数车加工流程
  9. oracle 分页公式
  10. Java学习路线(22)——测试框架Junit