0020 - Suma divizorilor primi: Diferență între versiuni
(Pagină nouă: ==Cerință== Să se scrie o funcție Python care să determine suma divizorilor primi ai unui număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de ieşire. ==Restricții de precizări== *numele funcției va fi '''sum_div_prim''' *funcția va avea doi parametri, reprezentând numărul pentru care se calculează suma divizorilor, respectiv valoarea calculată *numărul pentru care se calculează suma divizorilor primi va f...) |
|||
(Nu s-au afișat 4 versiuni intermediare efectuate de alți 2 utilizatori) | |||
Linia 2: | Linia 2: | ||
Să se scrie o funcție Python care să determine suma divizorilor primi ai unui număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de ieşire. | Să se scrie o funcție Python care să determine suma divizorilor primi ai unui număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de ieşire. | ||
==Restricții de precizări== | ==Restricții de precizări== | ||
Linia 11: | Linia 9: | ||
*numărul pentru care se calculează suma divizorilor primi va fi mai mare decât '''1''' și mai mic decât '''2.000.000.000''' | *numărul pentru care se calculează suma divizorilor primi va fi mai mare decât '''1''' și mai mic decât '''2.000.000.000''' | ||
==Date de intrare== | |||
Se citește de la tastatură un număr '''n'''. | |||
==Date de ieșire== | |||
Dacă datele de intrare sunt corecte, apare mesajul '''Datele de intrare sunt corecte.''' și se returnează valoarea cerută, în caz contrar '''Datele de intrare sunt incorecte.'''. | |||
==Exemplu== | |||
===Exemplul 1=== | |||
;Date de intrare | |||
:1234 | |||
;Date de ieșire | |||
:Datele de intrare sunt corecte. | |||
:619. | |||
==Important== | ==Important== | ||
Linia 20: | Linia 32: | ||
===Rezolvare ver. 1=== | ===Rezolvare ver. 1=== | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def validate_input(numar): | |||
if numar.isdigit() and 1 <= int(numar) <= 2_000_000_000: | |||
return True | |||
return False | |||
def sum_div_prim(numar | |||
def sum_div_prim(numar, suma=0): | |||
for i in range(2, numar+1): | for i in range(2, numar + 1): | ||
if numar % i == 0: | if numar % i == 0: | ||
este_prim = True | este_prim = True | ||
for j in range(2, int(i**0.5)+1): | for j in range(2, int(i ** 0.5) + 1): | ||
if i % j == 0: | if i % j == 0: | ||
este_prim = False | este_prim = False | ||
Linia 33: | Linia 49: | ||
suma += i | suma += i | ||
return suma | return suma | ||
if __name__ == '__main__': | |||
numar = input() | |||
suma = 0 | |||
if validate_input(numar): | |||
numar = int(numar) | |||
print("Datele de intrare sunt corecte.") | |||
print(sum_div_prim(numar, suma)) | |||
else: | |||
print("Datele de intrare sunt incorecte.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatii== | |||
În această soluție, am definit mai întâi funcția validate_input() care primește numărul de intrare și verifică dacă este un număr întreg și dacă este în intervalul specificat. Funcția returnează True dacă numărul este valid și False în caz contrar. | |||
În funcția sum_div_prim(), apelăm mai întâi funcția validate_input() pentru a verifica dacă numărul este valid. Dacă nu este valid, afișăm un mesaj de eroare. Dacă este valid, efectuăm calculele pentru a găsi suma divizorilor primi. | |||
În blocul if __name__ == '__main__':, am adăugat și o verificare suplimentară pentru a apela funcția validate_input() înainte de a afișa mesajul de intrare corectă și de a calcula suma divizorilor primi. |
Versiunea curentă din 6 mai 2023 16:18
Cerință
Să se scrie o funcție Python care să determine suma divizorilor primi ai unui număr natural transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de ieşire.
Restricții de precizări
- numele funcției va fi sum_div_prim
- funcția va avea doi parametri, reprezentând numărul pentru care se calculează suma divizorilor, respectiv valoarea calculată
- numărul pentru care se calculează suma divizorilor primi va fi mai mare decât 1 și mai mic decât 2.000.000.000
Date de intrare
Se citește de la tastatură un număr n.
Date de ieșire
Dacă datele de intrare sunt corecte, apare mesajul Datele de intrare sunt corecte. și se returnează valoarea cerută, în caz contrar Datele de intrare sunt incorecte..
Exemplu
Exemplul 1
- Date de intrare
- 1234
- Date de ieșire
- Datele de intrare sunt corecte.
- 619.
Important
Soluţia propusă va conţine doar 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
def validate_input(numar):
if numar.isdigit() and 1 <= int(numar) <= 2_000_000_000:
return True
return False
def sum_div_prim(numar, suma=0):
for i in range(2, numar + 1):
if numar % i == 0:
este_prim = True
for j in range(2, int(i ** 0.5) + 1):
if i % j == 0:
este_prim = False
break
if este_prim:
suma += i
return suma
if __name__ == '__main__':
numar = input()
suma = 0
if validate_input(numar):
numar = int(numar)
print("Datele de intrare sunt corecte.")
print(sum_div_prim(numar, suma))
else:
print("Datele de intrare sunt incorecte.")
Explicatii
În această soluție, am definit mai întâi funcția validate_input() care primește numărul de intrare și verifică dacă este un număr întreg și dacă este în intervalul specificat. Funcția returnează True dacă numărul este valid și False în caz contrar.
În funcția sum_div_prim(), apelăm mai întâi funcția validate_input() pentru a verifica dacă numărul este valid. Dacă nu este valid, afișăm un mesaj de eroare. Dacă este valid, efectuăm calculele pentru a găsi suma divizorilor primi.
În blocul if __name__ == '__main__':, am adăugat și o verificare suplimentară pentru a apela funcția validate_input() înainte de a afișa mesajul de intrare corectă și de a calcula suma divizorilor primi.