exCRT
将其视为一个不定方程,用 exgcd 解出 的值。然后得出 的一个解。可得:
所以可以将两个方程合并为一个。
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】