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