#include<iostream>
using namespace std;
long long x0, y0;
long long ex_gcd(long long a, long long b, long long& x0, long long& y0)
{
long long m;
if (b == 0)
{
x0 = 1;
y0 = 0;
return a;
}
else
{
m = ex_gcd(b, a%b, x0, y0);
long long t = x0;
x0 = y0;
y0 = t - a / b*y0;//gcd(a,b)=gcd(b,a%b),对应系数相等
}
return m;
}
//g=c/gcd(a,b)
//上述方法求得的是ax+by=c/g,并不是通解
//通解为x=g*x0+mt,y=g*y0-nt
//其中m=b/g,n为a/g
//由于x=g*x0+mt,t可以任意取值,如果取整数的话,该式等价于x%m=g*x0;
//最小非负整数解就是(g*x0+m)%m;
求解ax+by=c的通解以及x的最小非负整数解
最新推荐文章于 2023-01-01 21:34:29 发布