最近研究同余,随手写的广义广义欧几里得算法,求解形如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;
}