90pts求助,为什么要对A取反?
查看原帖
90pts求助,为什么要对A取反?
1215295
discretely楼主2024/8/3 14:28

//if(A<0)A=-A,B=-B; 为啥这里要取反? 如果不取反应该在后面怎么操作呢

#include<bits/stdc++.h>
using namespace std;
int _;
#define endl '\n'
#define int long long

int exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1,y=0;return a;
    }
    int x1,y1,d;
    d=exgcd(b,a%b,x1,y1);
    x=y1,y=x1-a/b*y1;
    return d;
}

void solve(){
	int x,y,m,n,l;
    cin>>x>>y>>m>>n>>l;
	long long A=n-m,B=x-y;
    //if(A<0)A=-A,B=-B;
  //为啥这里要取反?
    int r=__gcd(A,l);
	exgcd(A,l,x,y);
	if(B%r) cout<<"Impossible";
	else{
        int num=(B/r);
        x*=num;int k;
        if(x<0){
            k=(abs(x)+(l/r))/(l/r);
        }
        else k=-(x/(l/r));
        x+=k*(l/r);
        cout<<x<<endl;
    }


}

signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	solve();
	return 0;
	
}
2024/8/3 14:28
加载中...