中国剩余定理裸题WA#2求助
查看原帖
中国剩余定理裸题WA#2求助
333800
qip101楼主2022/7/7 20:45
#include <iostream> 
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
long long k;
long long x,y;
long long MM=1;
long long a[25],b[25],u[25],M[25];
inline void init()
{	
	cin >> k;
	for(int i=1;i<=k;i++)
		cin >> a[i];
	for(int i=1;i<=k;i++)
	{
		cin >> b[i];
		MM*=b[i];
	}
	for(int i=1;i<=k;i++)
		M[i]=MM/b[i];
}
long long exgcd(long long a,long long b,long long &x,long long &y)
{
	if(b==0)
	{
		x=1,y=0;
		return a;
	}
	long long d=exgcd(b,a%b,y,x);
	y-=a/b*x;
	return d;
}
int main()
{
	ios::sync_with_stdio(false);
	init();
	for(int i=1;i<=k;i++)
	{
		exgcd(M[i],b[i],u[i],y);
		u[i]=(b[i]+u[i]%b[i])%b[i];
		for(int j=1;j<=a[i];j++)
			x=(x+M[i]*u[i])%MM;
	}
	cout << x << endl;
	return 0;
}
2022/7/7 20:45
加载中...