玄学WA#2
查看原帖
玄学WA#2
117756
liuziyan楼主2021/2/2 19:04

有大佬帮忙查查错吗?

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
long long m[12],a[12];
long long qmul(long long a,long long b,long long mod)
{
    long long ans=0;
    while(b>0)
    {
        if(b&1) ans=(ans+a)%mod;
        a=(a+a)%mod;
        b>>=1;
    }
    return ans;
}
long long exgcd(long long a,long long b,long long &x,long long &y){
	long long d=a;
	if (b) d=exgcd(b,a%b,y,x),y-=x*(a/b); else x=1,y=0;
	return d;
}
long long inv(long long a,long long m){
	long long x,y;
	long long d=exgcd(a,m,x,y);
	return d==1?(x+m)%m:-1;
}
long long CRT(long long a[],long long m[],int n){
	long long M=1;
	for (int i=0;i<n;i++){
		M*=m[i];
	}
	long long ret=0;
	for (int i=0;i<n;i++){
		long long Mi=M/m[i];
		ret+=qmul(qmul(Mi,inv(Mi,m[i]),M),a[i],M);
	}
	return (ret%M+M)%M;
}
int main(){
	int n;
	scanf("%d",&n);
	for (int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for (int i=0;i<n;i++){
		scanf("%d",&m[i]);
		a[i]=(a[i]%m[i]+m[i])%m[i];
	}
	cout<<CRT(a,m,n)<<endl;
	return 0;
}
2021/2/2 19:04
加载中...