【模板】exgcd

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N=1e6+10;
int T,a,b,c,d,x,y,num;

int exgcd(int a,int b,int &x,int &y) {

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

signed main() {
	cin>>T;
	while(T--) {
		cin>>a>>b>>c;
		x=0; y=0; num=0;
		int gcd=__gcd(a,b);

		if(c%gcd!=0) {
			cout<<-1<<'\n';
			continue;
		}
		a/=gcd; b/=gcd; c/=gcd;
		exgcd(a,b,x,y);
		x*=c; y*=c;

		int xmin,xmax,ymin,ymax;
		xmin=(x>0 && x%b!=0) ? x%b : x%b+b;
		ymax=(c-xmin*a)/b;
		ymin=(y>0 && y%a!=0) ? y%a : y%a+a;
		xmax=(c-ymin*b)/a;

		if(xmax>0) num=(xmax-xmin)/b+1;
		if(!num) {
			cout<<xmin<<' '<<ymin<<' '<<'\n';
		}
		else {
			cout<<num<<' '<<xmin<<' '<<ymin<<' '<<xmax<<' '<<ymax<<'\n'; 
		}
	}
	
	return 0;
}
posted on 2024-11-29 14:49  Ueesugi_sakura  阅读(2)  评论(0编辑  收藏  举报