84分求助
查看原帖
84分求助
835809
T_TLucas_Yin楼主2023/7/27 09:22

不知道是不是long long太小,试过开__int128,爆编译错误了,有没有大佬教一下用法也行

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll x,y,r;
void fgcd(ll &x,ll &y,ll beichu,ll yu){
    if(yu==0) r=beichu,x=1,y=0;
    else{
		fgcd(y,x,yu,beichu%yu);
		y-=beichu/yu*x;
	}
}
ll gcd(ll a,ll b){
    if(b==0) return a;
    else return gcd(b,a%b);
}
ll lcm(ll a,ll b){ return a/gcd(a,b)*b; }
ll a1,a2,b1,b2;
void f(){
    fgcd(x,y,a1,a2);
    ll k=b2-b1;
    x=x*k/r%(a2/r);
    if(x<0) x+=a2/r;
    ll m=lcm(a1,a2);
    b1=(a1*x+b1)%m;
    if(b1<0) b1+=m;
    a1=m;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    	long long a,b;
        cin>>a>>b;
        a2=a,b2=b;
        if(i==1) a1=a2,b1=b2;
        else f();
    }
    cout<<(long long)(b1%a1);
    return 0;
}
2023/7/27 09:22
加载中...