84分求助,调了好几个小时调哭孩子了
查看原帖
84分求助,调了好几个小时调哭孩子了
70081
尹昱钦楼主2021/6/11 00:58
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
#include<ctime>
#include<stack>
using namespace std;
const int maxn=100005;
int n;
long long m,x,y,ans;
long long a[maxn],b[maxn];
inline long long ksc(long long a,long long b,long long mod){
	return (a*b-(long long)((long double)x/mod*y)*mod+mod)%mod;
}
long long exgcd(int a,int b){
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	long long gcd=exgcd(b,a%b);
	swap(x,y);
	y=y-(a/b)*x;
	return gcd;
}
int main()
{
    cin>>n;
	for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i],&b[i]);
	m=a[1],ans=b[1]%a[1];
	for(int i=2;i<=n;i++){
		long long gcd=exgcd(m%a[i],a[i]);
		long long c=b[i]-ans;
		x=ksc(x,c/gcd,a[i]);
		long long M=m/gcd*a[i];
		ans=((ans+x*m)%M+M)%M;
		m=M;
	}
	cout<<(ans%m+m)%m;
    return 0;
}

真的不知道哪里挂了

2021/6/11 00:58
加载中...