2915 - Sum Square: Difference between revisions
Paul Ungur (talk | contribs) Pagină nouă: ==Cerința== Se dă numărul natural <span style=“color: red”>n</span>. Determinați dacă numărul se poate scrie ca sumă de două pătrate perfecte. Dacă da, afișați două pătrate perfecte a căror sumă este <span style=“color: red”>n</span>, în ordine crescătoare, sau mesajul <span style=“color: red”>NU</span> în caz contrar. ==Date de intrare== Programul citește de la tastatură numărul <span style=“color: red”>n</span>; ==Date de ieșire== Pr... |
Paul Ungur (talk | contribs) No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
==Date de ieșire== | ==Date de ieșire== | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Date de intrare valide."''', apoi programul va afișa pe ecran cele <span style=“color: red”>2</span> pătrate care alcătuiesc numărul sau mesajul <span style=“color: red”>NU</span> în cazul în care nu există. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Date de intrare invalide".''' | |||
==Restricții și precizări== | ==Restricții și precizări== | ||
Line 14: | Line 14: | ||
==Exemplu:== | ==Exemplu:== | ||
Intrare | Intrare | ||
169 | : 169 | ||
Ieșire | Ieșire | ||
25 144 | : Date de intrare valide | ||
: 25 144 | |||
==Rezolvare== | ==Rezolvare== | ||
Line 23: | Line 24: | ||
import math | import math | ||
def | |||
def validare_date(n): | |||
"""Functie de validare""" | """Functie de validare""" | ||
if not 1 <= n <= 10**15: | if not 1 <= n <= 10**15: | ||
Line 30: | Line 32: | ||
return True | return True | ||
def | def sum_square(n): | ||
n = | ok = False | ||
for i in range(1, int(math.sqrt(n // 2)) + 1): | |||
x = i * i | |||
y = n - x | |||
j = int(math.sqrt(y)) | |||
if j * j == y and not ok: | |||
print(min(y, x), max(x, y)) | |||
ok = True | |||
print( | |||
if not ok: | |||
print("NU") | |||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n = int(input()) | |||
if validare_date(n): | |||
print("Date de intrare valide") | |||
sum_square(n) | |||
else: | |||
print("Date de intrare invalide") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie cod: == | |||
==Explicatie== | Funcția validare_date(n) primește un număr n și verifică dacă acesta se află în intervalul [1, 10^15]. Dacă numărul nu respectă această condiție, se afișează un mesaj de eroare și se returnează False. În caz contrar, se returnează True. | ||
Funcția | Funcția sum_square(n) primește un număr n și calculează perechile de numere x și y, astfel încât x^2 + y^2 = n. Pentru a verifica această condiție, se utilizează două bucle for. Prima buclă iterează de la 1 până la radicalul pătrat al lui n // 2, iar în interiorul primei bucle se calculează x = i*i și y = n - x. Apoi, se verifică dacă y este un pătrat perfect (adica j * j == y) și se afișează perechea (x, y) dacă această condiție este îndeplinită. Se folosește o variabilă ok pentru a se asigura că se afișează doar prima pereche găsită. | ||
În blocul if __name__ == '__main__':, se citește de la intrare un număr n utilizând funcția input(). Apoi, se verifică dacă numărul este valid utilizând funcția validare_date(). Dacă numărul este valid, se afișează un mesaj de confirmare și se apelează funcția sum_square() pentru a găsi și afișa perechile (x, y). În caz contrar, se afișează un mesaj de eroare. | |||
Funcția | |||
Latest revision as of 18:56, 29 June 2023
Cerința[edit | edit source]
Se dă numărul natural n. Determinați dacă numărul se poate scrie ca sumă de două pătrate perfecte. Dacă da, afișați două pătrate perfecte a căror sumă este n, în ordine crescătoare, sau mesajul NU în caz contrar.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n;
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi programul va afișa pe ecran cele 2 pătrate care alcătuiesc numărul sau mesajul NU în cazul în care nu există. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".
Restricții și precizări[edit | edit source]
1≤n≤1015 dacă există mai multe perechi de pătrate perfecte a căror sumă este n, poate fi afișată oricare
Exemplu:[edit | edit source]
Intrare
- 169
Ieșire
- Date de intrare valide
- 25 144
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import math
def validare_date(n):
"""Functie de validare""" if not 1 <= n <= 10**15: print("Numarul introdus trebuie sa fie intre 1 si 10^15.") return False return True
def sum_square(n):
ok = False for i in range(1, int(math.sqrt(n // 2)) + 1): x = i * i y = n - x j = int(math.sqrt(y))
if j * j == y and not ok: print(min(y, x), max(x, y)) ok = True
if not ok: print("NU")
if __name__ == '__main__':
n = int(input()) if validare_date(n): print("Date de intrare valide") sum_square(n) else: print("Date de intrare invalide") </syntaxhighlight>
Explicatie cod:[edit | edit source]
Funcția validare_date(n) primește un număr n și verifică dacă acesta se află în intervalul [1, 10^15]. Dacă numărul nu respectă această condiție, se afișează un mesaj de eroare și se returnează False. În caz contrar, se returnează True. Funcția sum_square(n) primește un număr n și calculează perechile de numere x și y, astfel încât x^2 + y^2 = n. Pentru a verifica această condiție, se utilizează două bucle for. Prima buclă iterează de la 1 până la radicalul pătrat al lui n // 2, iar în interiorul primei bucle se calculează x = i*i și y = n - x. Apoi, se verifică dacă y este un pătrat perfect (adica j * j == y) și se afișează perechea (x, y) dacă această condiție este îndeplinită. Se folosește o variabilă ok pentru a se asigura că se afișează doar prima pereche găsită. În blocul if __name__ == '__main__':, se citește de la intrare un număr n utilizând funcția input(). Apoi, se verifică dacă numărul este valid utilizând funcția validare_date(). Dacă numărul este valid, se afișează un mesaj de confirmare și se apelează funcția sum_square() pentru a găsi și afișa perechile (x, y). În caz contrar, se afișează un mesaj de eroare.