exCRT

{xa1(modm1)xa2(modm2)x=pm1+a1=qm2+a2pm1qm2=a2a1

将其视为一个不定方程,用 exgcd 解出 p,q 的值。然后得出 x 的一个解。可得:

xpm1+a1(modlcm(m1,m2))

所以可以将两个方程合并为一个。

#include<cstdio>
#include<algorithm>
using namespace std;
typedef __int128 ll;
ll exgcd(ll a,ll b,ll&x,ll&y){
	if(!b){x=1;y=0;return a;}
	ll d=exgcd(b,a%b,y,x);
	y-=(a/b)*x;return d;
}
int main(){
	int n;long long lla,llb;
	scanf("%d%lld%lld",&n,&llb,&lla);
	ll a1=lla,m1=llb,a2,m2,q1,q2,d;
	for(int i=1;i<n;i++){
		scanf("%lld%lld",&llb,&lla);
		a2=lla;m2=llb;d=exgcd(m1,m2,q1,q2);
		m2=m1*m2/d;a2=((q1*(a2-a1)/d*m1+a1)%m2+m2)%m2;a1=a2;m1=m2;
	}
	long long ans=a1;printf("%lld\n",ans);
	return 0;
}

posted @   hihihi198  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩