nod51 1079(中国剩余定理)

中国剩余定理原理以及模板:https://blog.csdn.net/tick_tock97/article/details/71313058

题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1079

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

long long m[101],a[101],p,n,Mod = 1e9,ans;

void ex_gcd(long long a,long long b,int &x,int &y){
	if(b == 0){
		x = 1;
		y = 0;
		return;
	}
	ex_gcd(b,a%b,x,y);
	int tmp = x;
	x = y;
	y = tmp - (a/b)*y;
}


void solve(){
	long long M = 1;
	ans = 0;
	for(int i = 0;i<n;++i){
		M *= m[i];
	}
	for(int i = 0;i<n;++i){
		int x,y;
		long long Mi = M/m[i];
		ex_gcd(Mi,m[i],x,y);
		ans = (ans + x*Mi*a[i])%M;
	}
	while(ans < 0){
		ans += M;
	}
}

int main(){
	cin>>n;
	for(int i = 0;i<n;++i){
		cin>>m[i]>>a[i];
	}
	solve();
	cout<<ans<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/dukig/article/details/89069809