求助excrt60分
查看原帖
求助excrt60分
536439
YONIC楼主2022/5/11 22:09
#include<bits/stdc++.h>
#define int __int128
#define M5 (int)(1e5+3)
using namespace std;
struct equation{int r,mod;};
queue<equation>Q;
int Qread(){
	int x=0;
	bool f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=0;
		ch=getchar();
	}
	while(isdigit(ch)){
		x=(x<<3)+(x<<1)+(ch^48); 
		ch=getchar();
	}
	return f?x:-x;
}
void Qwrite(int x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9) Qwrite(x/10);
	putchar((x%10)^48);
}
int n;
int gcd(int u,int v){return v?gcd(v,u%v):u;}
int lcm(int u,int v){return u/gcd(u,v)*v;}
void exgcd(int a,int b,int&x,int&y){
	if(!b){
		x=1;
		y=0;
		return;
	}
	exgcd(b,a%b,x,y);
	int k=x;
	x=y;
	y=k-y*(a/b);
}
void excrt(){
	while(Q.size()>1){
		equation e1=Q.front();
		Q.pop();
		equation e2=Q.front();
		Q.pop();
		int m1=e1.mod,m2=e2.mod,r1=e1.r,r2=e2.r;
		int d=gcd(m1,m2),p1=m1/gcd(m1,m2),p2=m2/gcd(m1,m2);
		int g1,g2;
		exgcd(p1,p2,g1,g2);
		equation e;
		e.mod=lcm(m1,m2);
		e.r=r1+(r2-r1)/d*g1*m1;
        e.r%=e.mod;
		Q.push(e);
	}
}
signed main(){
	n=Qread();
	for(int i=1;i<=n;++i){
        equation e;
		e.mod=Qread();
		e.r=Qread();
		Q.push(e);
	}
	excrt();
	Qwrite(Q.front().r);
	return 0;
}
2022/5/11 22:09
加载中...