0983 - Ecuatie

From Bitnami MediaWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

<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>