4190 - FPatrate

From Bitnami MediaWiki

Cerința

Subprogramul patrate are trei parametri:

  • n, prin care primește un număr natural (n∈[2,109]);
  • x și y, prin care furnizează câte un număr natural cu proprietatea că x2⋅y2=nși 2≤x<ysau valoarea 0, prin fiecare dintre aceștia, dacă nu există două astfel de numere. Dacă sunt mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui x.

Scrieți definiția completă a subprogramului.


Date de intrare

Se citește de la tastatură n: un număr natural între 2 și 10^9 inclusiv.

Date de ieșire

  • x: un număr natural care să îndeplinească proprietatea că x^2 * y^2 = n și 2 ≤ x < y. Dacă nu există astfel de numere, x este 0.
  • y': un număr natural care să îndeplinească proprietatea că x^2 * y^2 = n și 2 ≤ x < y. Dacă nu există astfel de numere, y este 0. Dacă există mai multe perechi (x, y) care să satisfacă condiția, se va returna perechea care are x minim.


Exemplu

Pentru n=400, după apel, x=2 şi y=10, iar pentru n=16 sau n=24, după apel, x=0 și y=0.


Important

Soluția propusă va conține definiția funcţiei cerute. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluției.

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1"> def validare_n(n):

   if isinstance(n, int) and 2 <= n <= 10**9:
       return True
   return False

def patrate(n):

   x = 0
   y = 0
   for i in range(2, int(n**0.5) + 1):
       if n % (i**2) == 0:
           if x == 0 or i < x:
               x = i
               y = n // (i**2)
   return x, y

if __name__ == '__main__':

   n = int(input("Introduceți n: "))
   if validare_n(n):
       x, y = patrate(n)
       print(f"x = {x}, y = {y}")
   else:
       print("n nu este un număr natural între 2 și 10^9 inclusiv")



</syntaxhighlight>

Explicatii

Acest cod definește mai întâi funcția de validare "validare_n", apoi subprogramul "patrate", care primește un număr natural n și returnează o pereche (x, y) care îndeplinește proprietatea dată sau (0, 0) în caz contrar. În final, în cadrul unui bloc "if name == 'main':", este preluată valoarea de intrare de la utilizator și apoi se apelează funcția "patrate".