NEFU84——五指山(Exgcd)

传送门

这不是Exgcd的板子吗?

可以得出方程:

$dt+nk=y-x$

我们只需要套用Exgcd

求出最小正整数解就是了

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	char ch=getchar();
	int res=0;
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
	return res;
}
#define ll  long long
ll exgcd(ll a,ll b,ll &x,ll &y){
	if(b==0){
		x=1,y=0;return a;
	}
	ll d=exgcd(b,a%b,x,y);
	ll z=x;x=y,y=z-y*(a/b);
	return d;
}
ll d,x,y,a,s,b,c,z;
int main(){
	int T;
	cin>>T;
	while(T--){
		cin>>b>>a>>s>>d;
		int z=exgcd(a,b,x,y);
		x=x*(d-s)/z;
		if((d-s)%z) cout<<"Impossible"<<'
';
		else cout<<(x%(b/z)+(b/z))%(b/z)<<'
';
	}

}
原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366437.html