P1495 【模板】中国剩余定理(CRT)/曹冲养猪

见数论中相关讲解。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,x=0;
const int maxn=15;
int a[maxn],b[maxn],m[maxn],t[maxn],M=1;
void exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1,y=0;return ;
	}
	exgcd(b,a%b,y,x);y-=a/b*x;
}
int ny(int a,int mod){
	int x,y;
	exgcd(a,mod,x,y);
	return (x%mod+mod)%mod;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];M*=a[i];
	}
	for(int i=1;i<=n;i++)m[i]=M/a[i],t[i]=ny(m[i],a[i]);
	for(int i=1;i<=n;i++)x+=(b[i]*m[i]%M*t[i]%M),x%=M;
	cout<<x;
	return 0;
}
上一篇:Java基础知识强化之集合框架笔记05:Collection集合的遍历


下一篇:循环中的函数或多次调用该函数,什么更快?