20pts求助
查看原帖
20pts求助
853503
Ayk71200楼主2024/5/27 08:01

没对的都是tle

寄录

#include<bits/stdc++.h>
using namespace std;
int n;
long long mm=1,M[100005],ans=0,a[100005],b[100005];
long long gsc(long long x,long long y){
long long d=0;
while(y){
if(y&1) d=(x+d)%mm;
x=(x+x)%mm;
y>>=1;
}
return d;
}
void exgcd(long long a,long long b,long long &x,long long &y) {
	if(!b) {
		x=1,y=0;
		return;
	}
	exgcd(b,a%b,x,y);
	long long z=x;
	x=y,y=z-y*(a/b);
}
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {
		scanf("%lld%lld",&a[i],&b[i]);
		mm*=a[i];
	}
	for(int i=1; i<=n; i++) {
		M[i]=mm/a[i];
		long long t=0,k=0;
		exgcd(M[i],a[i],t,k);
		ans=(ans+gsc(M[i]*b[i]*t))%mm;
	}
	while(ans<=0) ans+=mm;	
	printf("%lld",ans);
	return 0;
}
2024/5/27 08:01
加载中...