0983 - Ecuatie

De la Universitas MediaWiki

Cerința

Se dau a și b numere naturale nenule, cu a < b. Să se determine soluțiile ecuației 1/x+1/y+1/z=a/b , unde x,y,z sunt numere naturale nenule .

Date de intrare

Programul citește de la tastatură numerele naturale nenule a și b, separate prin spațiu.

Date de ieșire

Programul va afișa pe ecran, pe linii separate, soluțiile ecuației în ordinea crescătoare a valorilor lui x, iar la valori egale ale lui x în ordinea crescătoare a valorilor lui y . În cazul în care problema nu are soluţii se va afişa mesajul NU ARE SOLUTII.

Restricții și precizări

  • 1 ≤ a < b ≤ 100
  • Se vor afișa numai soluțiile cu x ≤ y ≤ z numere naturale

Exemplu 1

Intrare

2 3

Iesire

2 7 42
2 8 24
2 9 18
2 10 15
2 12 12
3 4 12
3 6 6
4 4 6

Rezolvare

def main():
    # Citirea datelor de intrare
    a, b = map(int, input("Introduceți valorile a și b, separate prin spațiu: ").strip().split())

    assert 1 <= a < b <= 100, "Restricțiile sunt 1 ≤ a < b ≤ 100"

    solutions = []

    # Generarea soluțiilor
    print("Generarea soluțiilor...")
    for x in range(1, 1001):
        for y in range(x, 1001):
            for z in range(y, 1001):
                if a * (x * y * z) == b * (x * y + y * z + z * x):
                    solutions.append((x, y, z))
                    print(x,y,z)

    # Sortarea soluțiilor în ordine crescătoare a lui x, iar pentru valori egale de x, în ordine crescătoare a lui y și z
    solutions.sort(key=lambda sol: (sol[0], sol[1], sol[2]))

    if (solutions == 0):
        print("NU EXISTA SOLUTII")


if __name__ == "__main__":
    main()