解决不定方程
#include <cstdio>
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
void exgcd(int a, int b, int& x, int& y)
{
if (b){ exgcd(b, a % b, y, x);y -= x * (a / b);}
else y = (x = 1) - 1;
}
void exgcd_book(int a, int b, int& d, int& x, int& y)
{
if (!b) { d = a, x = 1, y = 0; }
else { exgcd_book(b, a % b, d, y, x);y -= x * (a / b); }
}
bool linear_equation(int a, int b, int c, int& x, int& y)
{
int d;
exgcd_book(a, b, d, x, y);
if (c % d)
return false;
x *= c / d; y*= c / d;
return true;
}
int main()
{
int a = 33, b = 15, c = 66;
int x, y, d;
exgcd_book(a, b, d, x, y);
printf("a*x+b*y= d 方程的解\nx=%d y=%d\n", x, y);
if (!linear_equation(a, b, c, x, y))
printf("方程无解\n");
else
{
printf("a*x+b*y= c 方程的特解\nx=%d y=%d\n", x, y);//x之前变化较 x *= c / d; y* c / d;
int min_num = (x % (b / d) + (b / d)) % (b / d);
printf("a*x+b*y= c 方程的最小正整数解\nx=%d\n", min_num);
}
return 0;
}
随记