CRT龟速乘TLE,不用又WA了,求助
查看原帖
CRT龟速乘TLE,不用又WA了,求助
95072
wudiss8楼主2021/8/2 19:47

RT,不用会WA了最后一个点

#include<bits/stdc++.h>
#define rg register int
#define int long long
using namespace std;
int a[21],b[21];
inline int ny(int a,int b,int &x,int &y){
	if(b==0){
		x=1;y=0;
		return x;
	}
	int t=ny(b,a%b,x,y);
	x=y;
	y=t-(a/b)*y;
	return x;
}
inline int mul(int x,int y,int mod){
	if(x==0 and y==0)return 0;
	int res=0;
	for(;y;y>>=1,x=(x<<1)%mod)if(y&1)res=(res+x)%mod;
	return res;
}
inline int read(){
	char c=getchar();
	int s=0,f=1;
	while(c<'0' or c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0' and c<='9'){
		s=(s<<1)+(s<<3)+c-'0';
		c=getchar();
	}
	return s*f;
}
signed main(){
	int k,M=1,x,y,ans=0;
	k=read();
	for(rg i=1;i<=k;i++){
	    a[i]=read();
    }
	for(rg i=1;i<=k;i++){
	    b[i]=read();
	    M*=b[i];
    }
    for(rg i=1;i<=k;i++){
    	ans+=(mul(a[i],(M/b[i]),M)*ny(M/b[i],b[i],x,y))%M;
    	ans%=M;
	}
	while(ans<0)ans+=M;
	printf("%lld\n",ans%M);
	return 0;
}
2021/8/2 19:47
加载中...