萌新求调
查看原帖
萌新求调
1742178
pagepage楼主2025/7/25 21:05
#include<bits/stdc++.h>
using namespace std;
long long T;
long long a[100005],m[100005];
long long d(long long x,long long y){
	return __gcd(x,y);
}

long long eular(long long n) {
    long long ans=1;
    for(long long i=2;i*i<=n;i++) {
        if(n%i==0) {
            n=n/i;
            ans=ans*(i-1);
            while(n%i==0) {
                n=n/i; 
                ans=ans*i;  
            }
        }
    }
    if(n>1)ans=ans*(n-1);
    return ans;
}

long long mi(long long x,long long k,long long mod) {
    long long ans=1,q=x;
    while(k>0){
        if(k%2==1)ans=ans*q%mod;
        q=q*q%mod;
        k=k/2;
    }
    return ans;
}
long long ny(long long x,long long y){
	return mi(x,eular(y)-1,y);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>T;
	for(long long i=1;i<=T;i++){
		cin>>m[i]>>a[i];
	}
	for(long long i=2;i<=T;i++){
		long long a1=a[i-1],m1=m[i-1],a2=a[i],m2=m[i];
		long long k=d(m1,m2);
		long long t0=ny(m1/k,m2/k)%(m2/k)*(a2-a1)/k;
		while(t0<0){
			t0=t0+(m2/k);
		}
		t0=t0%(m2/k);
		a2=(a1+t0*m1)%(m1*m2/k);m2=m1*m2/k;
		m[i]=m2;a[i]=a2;
	}
	while(a[T]<0){
		a[T]=a[T]+m[T];
	}
	cout<<a[T];
	return 0;
}
2025/7/25 21:05
加载中...