4296 - Sum Div
Cerinţa[edit | edit source]
Se dă un șir de n numere naturale nenule și de asemenea un număr natural p. Să se calculeze suma numerelor din șir care au cel puțin p divizori.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele nr și p, iar apoi șirul de 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 numerelor din șir care au cel puțin p divizori.
Restricții și precizări[edit | edit source]
- nr ∈ Ν
- 1 ⩽ nr ⩽ 100.000
- 1 ⩽ p ⩽ 100.000
- cele n numere din șir vor fi numere naturale nenule mai mici decât 1.000.000
Exemplu1[edit | edit source]
- Intrare
- 5 3
- 7 4 10 17 1
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 14
Explicație[edit | edit source]
Numerele din șir care au cel puțin 3 divizori sunt 4 și 10, iar suma lor este 14.
Exemplu2[edit | edit source]
- Intrare
- 5 100
- 5 12 24 3 72
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 0
Explicație[edit | edit source]
Niciun număr nu are cel puțin 100 de divizori, deci suma este 0.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import math
def validare_date(nr, p, n):
flag = False if 0 <= int(nr) <= 1_000 and 1 <= int(p) <= 1_0000: flag = all(isinstance(x, int) and 1 <= x <= 1_000_000 for x in n) return flag
def nrdiv(n):
cnt = 0 for i in range(1, int(math.sqrt(n))+1): if n % i == 0: cnt += 2 if i * i == n: cnt -= 1 return cnt
def suma_p_divizori(n, p):
suma = 0 for i in n: if nrdiv(i) >= p: suma += i return suma
if __name__ == '__main__':
nr, p = map(int, input().split()) n = list(map(int, input().split())) if validare_date(nr, p, n): print("\nDatele de intrare corespund restricțiilor impuse.\n") suma = suma_p_divizori(n, p) print(suma) else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicație[edit | edit source]
Codul calculează suma numerelor dintr-o listă dată, care au cel puțin p divizori. Datele de intrare sunt primite de la utilizator și sunt validate prin funcția validare_date(). Funcția nrdiv() calculează numărul de divizori ai unui număr dat, iar funcția suma_p_divizori() calculează suma numerelor din listă care au cel puțin p divizori. Dacă datele de intrare corespund restricțiilor impuse, se afișează suma calculată, altfel se afișează un mesaj corespunzător.