【悬关】0pts求助
查看原帖
【悬关】0pts求助
785639
xuchuhan楼主2024/4/6 17:09
#include<bits/stdc++.h>
#define int __int128
using namespace std;
const int N=1e6+5;
int n,x,y,ans,LCM;
int a[N],m[N];
int Exgcd(int a,int b){
	if(!b){
		x=1,y=0;
		return a;
	}
	int tmp=Exgcd(b,a%b);
	int t=x,x=y,y=t-(a/b)*y;
	return tmp;
}
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}
void write(int x){
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
    return;
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++)
		m[i]=read(),a[i]=read();
	ans=a[1],LCM=m[1];
	for(int i=2;i<=n;i++){
		int d=Exgcd(LCM,m[i]);
		int c=((a[i]-ans)%m[i]+m[i])%m[i],T=LCM/d*m[i];
		ans+=((c/d*x)%T)*LCM;
		LCM=T;
		ans=(ans%LCM+LCM)%LCM;
	}
	write(ans);
	return 0;
}
2024/4/6 17:09
加载中...