4190 - FPatrate: Difference between revisions
Vardai Erwin (talk | contribs) |
Vardai Erwin (talk | contribs) |
||
Line 19: | Line 19: | ||
==Exemplu== | ==Exemplu== | ||
===Exemplul 1=== | |||
;Intrare | |||
:400 | |||
;Ieșire | |||
:2 10 | |||
===Exemplul 2=== | |||
;Intrare | |||
:16 | |||
;Ieșire | |||
:0 0 | |||
===Exemplul 3=== | |||
;Intrare | |||
:24 | |||
;Ieșire | |||
:0 0 | |||
==Important== | ==Important== |
Revision as of 17:24, 6 May 2023
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
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa: 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. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse.".
Exemplu
Exemplul 1
- Intrare
- 400
- Ieșire
- 2 10
Exemplul 2
- Intrare
- 16
- Ieșire
- 0 0
Exemplul 3
- Intrare
- 24
- Ieșire
- 0 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".