4296 - Sum Div: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == 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 == 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 == Programul va afișa pe ecran numărul '''suma''', reprezentând suma numerelor din șir care au cel puțin '''p''' di...
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 15: Line 15:
: 7 4 10 17 1
: 7 4 10 17 1
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: 14
: 14
== Explicație ==  
== Explicație ==  
Line 69: Line 69:


</syntaxhighlight>
</syntaxhighlight>
== Explicație ==
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.

Latest revision as of 15:26, 28 April 2023

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.