#include <iostream>
using namespace std;
typedef long long ll;
int exgcd(int a,int b,int &x,int &y) //模板
{
if(b==0)
{
x=1;
y=0;
return a;
}
int ans=exgcd(b,a%b,x,y);
int temp=x;
x=y;
y=temp-a/b*y;
return ans; //gcd(a,b)
}
int main()
{
int a,b,c,x,y;
cin>>a>>b>>c; //求 a*x+b*y=c的一组最小解
int gcd=exgcd(a,b,x,y);
if(c%gcd!=0) cout<<"无解";
else
{
cout<<"有解\n";
int n_=c/gcd;
int xt=n_*x;
int b_=b/gcd;
if(b_<0) b_=-b_;
xt%=b_;
if(xt<=0) xt+=b_;
cout<<xt;//最小解的x
// n'=c/gcd; b'=b/gcd; a'=a/gcd
// xt = n'*x + b'* t (t为整数)
// yt= n'*y - a'* t
}
return 0;
}
拓展欧几里得模板
最新推荐文章于 2019-09-03 23:37:39 发布