广义欧几里得算法,求解形如ax+by=c的整数解

最近研究同余,随手写的广义广义欧几里得算法,求解形如ax+by=c的整数解。

#include<iostream>
using namespace std;

long gcd(const long & a,const long & b){
    if (b==0)
        return a;
    return gcd(b, a % b);
}

int main(){
	long a,b,c;
	cin>>a>>b>>c;
	long g=gcd(a,b);
	if (c%g!=0){
		cout<<"无整数解"<<endl; 
		return -1;
	}
	long x=c/g;
	//0=i-1,1=i,2=i+1
	long r0=a,	r1=b,r2,	s0=1,	s1=0,s2,	t0=0,t1=1,t2,a1;
	while(r1!=0){
		a1=r0/r1;
		r2=r0-a1*r1;
		s2=s0-a1*s1;
		t2=t0-a1*t1;
		//i=i+1
		r0=r1;
		r1=r2;
		s0=s1;
		s1=s2;
		t0=t1;
		t1=t2;
	}
	long s=s0,t=t0;
	cout<<s<<' '<<t<<endl;
	cout<<"x="<<s*x<<'-'<<b/g<<'k'<<endl;
	cout<<"y="<<t*x<<'+'<<a/g<<'k'<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/leisurely/p/3390897.html