不懂就问
  • 板块灌水区
  • 楼主xuyian
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/15 20:42
  • 上次更新2024/9/15 23:06:20
查看原帖
不懂就问
1290709
xuyian楼主2024/9/15 20:42

这份代码说是中国剩余定理,但本蒟蒻看不懂怎么办

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
LL n,a[500000],b[500000],M=1;
inline void Exgcd(LL a,LL b,LL &d,LL &x,LL &y){
	if(!b){d=a;x=1;y=0;}
	else{
		Exgcd(b,a%b,d,x,y);
		LL t=x;x=y;y=t-(a/b)*y;
	}
}
inline LL getanswer(){
	LL Ans=0,Mi,x,y,d;
	for(LL i=1;i<=n;++i){
		Mi=M/a[i];
		Exgcd(Mi,a[i],d,x,y);
		Ans=((Ans+Mi*x*b[i])%M+M)%M;
	}return (Ans+M)%M;
}
int main(){
	scanf("%lld",&n);
	for(LL i=1;i<=n;++i){
		scanf("%lld%lld",&a[i],&b[i]);
		M*=a[i];
	}
	printf("%lld\n",getanswer());
	return 0;
} 
2024/9/15 20:42
加载中...