您的位置:首页 > 其它

求解ax+by=c的通解以及x的最小非负整数解

2018-02-28 17:31 447 查看
#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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: