Положительные решения диофантового линейного уравнения

Мне нужно решить диофантовое линейное уравнение, такое как ax + by = n (x, y неизвестно).

Пример проблемы: http://codeforces.com/contest/898/problem/B

В настоящее время я использую этот метод (код ниже), но я не могу использовать x < 0 или y <0.

Как я могу определить, существует ли положительное решение с x >= 0 и y> = 0, как его найти?

Код:

#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
using namespace std;

typedef long long ll;

pair<int,int> gcdExtended(int a, int b)
{
    if (a == 0)
        return make_pair(0, 1);
    int x, y;
    tie(x, y) = gcdExtended(b % a, a);
    return make_pair(y - b/a * x, x);
}

int main()
{
    int a, b, n;
    cin >> n >> a >> b;
    int d = __gcd(a, b);
    if (n % d == 0) {
        cout << "YES" << endl;
        int x, y;
        tie(x, y) = gcdExtended(a, b);
        cout << x*(n/d) << " " << y*(n/d) << endl;
    }
    else {
        cout << "NO" << endl;
    }
}

0 ответов

Другие вопросы по тегам