0983 - Ecuatie

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

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

Exemplu 1[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line> 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()

</syntaxhighlight>