中国剩余定理学习笔记

给定 n 组非负整数 ai,bi,其中 bi 两两互质,求解关于 x 的方程组的最小非负整数解。
{xb1 (mod a1)xb2 (mod a2)...xbn (mod an)

这样的题怎么做呢?首先给出中国剩余定理的流程:

  1. 计算出所有 ai 的积 s
  2. 计算出 mi=s÷ai
  3. 计算出 mi 关于 ai 的逆元 xi
  4. 计算出 x0=i=1nmi×xi×bimods

证明:首先知道最后的通解一定是 x=x0+k×s。然后再证明 i[1,n],x0bi(modai)j[1,n]&ji,因为 mj0(modai),所以 mj×xj×bj0(modai),所以 x0=i=1nmi×xi×bimodsmi×xi×bi1×bibi(modai)。□

那我们就求出了原同余方程组的一个最小非负整数解。

inline void exgcd(ll &x,ll &y,ll a,ll b){
	if(!b){x=1;y=0;return;}
	exgcd(y,x,b,a%b);y-=a/b*x;
}
ll n,a[20],b[20],s=1,ans=0;
int main(){
	cin>>n;
	for(ll i=1;i<=n;i++)cin>>a[i]>>b[i],s*=a[i];
	for(ll i=1,x,y;i<=n;i++){
		exgcd(x,y,s/a[i],a[i]);
		ans=(ans+b[i]*s/a[i]*x%s)%s;
	}
	cout<<(ans%s+s)%s;
	return 0;
}
posted @   lrxQwQ  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示