4190 - FPatrate
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".