Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
2915 - Sum Square
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==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== 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== <span style=“color: red”>1≤n≤1015</span> dacă există mai multe perechi de pătrate perfecte a căror sumă este <span style=“color: red”>n</span>, poate fi afișată oricare ==Exemplu:== Intrare : 169 Ieșire : Date de intrare valide : 25 144 ==Rezolvare== <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: == 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.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width