3272 - Sum Div Ogl
Cerinţa[edit | edit source]
Se dau n numere naturale. Determinați suma divizorilor oglinditelor celor n numere.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran numărul suma, reprezentând suma cerută.
Restricții și precizări[edit | edit source]
- numar ∈ Ν
- 0 ⩽ n ⩽ 1.000
- 0 ⩽ numar ⩽ 1.000.000.000
Exemplu[edit | edit source]
- Intrare
- 3
- 12 23 30
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 99
Explicație[edit | edit source]
Oglinditul lui 12 este 21; suma divizorilor săi este 32. Oglinditul lui 23 este 32; suma divizorilor săi este 63. Oglinditul lui 30 este 3; suma divizorilor săi este 4.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare_date_numar(numar):
flag = False if numar.isdigit(): if 0 <= int(numar) <= 1_000_000_000: flag = True return flag
def validare_date_numere(n):
flag = False if 0 <= int(n) <= 1000: flag = True return flag
def oglindit(numar):
return int(str(numar)[::-1])
def suma_divizori(numar):
suma = 0 for i in range(1, numar//2 + 1): if numar % i == 0: suma += i suma += numar # adăugăm și numărul în sumă, deoarece este divizor al lui numar return suma
def suma_divizori_oglindite(lista_numere):
suma_totala = 0 for numar in lista_numere: oglinditul = oglindit(numar) suma_divizori_oglindit = suma_divizori(oglinditul) suma_totala += suma_divizori_oglindit return suma_totala
if __name__ == '__main__':
n = int(input()) if validare_date_numere(n): print("\nDatele de intrare corespund restricțiilor impuse.\n") lista_numere = [] for i in range(n): while True: numar = input(f"Introduceți numărul {i + 1}: ") if validare_date_numar(numar): lista_numere.append(int(numar)) break else: print("Numărul introdus nu corespunde restricțiilor impuse.") print(f"\nSuma divizorilor oglinditelor este: {suma_divizori_oglindite(lista_numere)}") else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicație[edit | edit source]
Acest program calculează suma divizorilor oglinditelor a n numere date de la tastatură. Mai întâi, programul verifică dacă numărul de numere introduse este valid, folosind funcția validare_date_numere. Dacă da, utilizatorul este rugat să introducă cele n numere, iar acestea sunt stocate într-o listă. Pentru fiecare număr din listă, se calculează oglinditul folosind funcția oglindit și apoi se calculează suma divizorilor oglinditelor acestui număr, folosind funcția suma_divizori_oglindite. Suma totală a divizorilor oglinditelor este calculată prin adăugarea sumei divizorilor oglinditelor pentru fiecare număr din listă și este afișată la sfârșit. Funcțiile validare_date_numar și validare_date verifică dacă numerele sunt valide și respectă anumite restricții.