0pts
查看原帖
0pts
490484
include13_fAKe楼主2024/7/30 16:05
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
int a[114514];
int b[114514];
int mul(int a,int b,int mod){
	int res=0;
	int base=a;
	while(b){
		if(b&1)	res=(res+base)%mod;
		base=(base+base)%mod;
		b>>=1;
	}
	return res;
}
int exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	int now=exgcd(b,a%b,x,y);
	int x_=x;
	int y_=y;
	x=y_;
	y=x_-a/b*y_;
	return now;
}
int excrt(){
	int m=b[1];		//模数 
	int ans=a[1];	//答案 
	for(int i=2;i<=n;i++){
		int p=((a[i]-ans)%b[i]+b[i])%b[i];
		int x,y;
		int gcd1=exgcd(m,b[i],x,y);
//		if(p%gcd1!=0)	return -1;
		x=mul(x,p/gcd1,b[i]/gcd1);
		ans+=x*m;
		m*=b[i]/gcd1;
		ans=(ans%m+m)%m; 
	}
	return (ans%m+m)%m; 
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	cout<<excrt()<<endl;
	return 0;
}
2024/7/30 16:05
加载中...