Я пытаюсь разгадать две головоломку с кувшином воды , используя евклидов алгоритм и диофантово уравнение.
- let gcd (m, n) = g
- используя евклидово альдортим, мы получаем X 'и Y' такие, что mX '+ nY' = g
для mX + nY = d
- , если d% g! = 0 решение не существует
- иначе я сделал X 'как X' / g * d и Y 'как Y' / g * d
это одно решение для mX + nY = d
теперь несколько решений по m (X '+ (k * n / g)) + n (Y' - (m * k / g)) = d
i просто необходимо вывести СУММА НЕТ. ОПЕРАЦИИ
Итак, я думаю о решении как X '+ Y' + k * (n - m) / g, и я хочу минимизировать этот
мой код ниже для того же (его давать неправильные ответы ...)
int X, Y;
int gcd(int a, int b)
{
if (b == 0)
{
X = 1;
Y = 0;
return a;
}
int g = gcd(b, a % b);
int X1 = Y;
int Y1 = X - (a / b) * Y;
X = X1;
Y = Y1;
return g;
}
cin >> m >> n >> d;
int g = gcd(n, m);
if (d % g)
cout << -1 << endl;
else
{
X = X / g * d;
Y = Y / g * d;
int ans = X + Y;
int mn = ans;
while (ans > 0)
{
ans += ((m - n) / g);
mn = min(ans, mn);
}
while (ans < 10000)
{
ans += ((n - m) / g);
mn = min(ans, mn);
}
cout << mn << endl;
}