4110 - NumarareSD
Sursa: 4110 - NumarareSD
Cerinţa
Se dă un vector cu n numere naturale. Să se determine câte dintre perechile de elemente din vector au aceeași sumă a divizorilor.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii, reprezentând elementele vectorului.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează pe ecran numărul c, reprezentând valoarea cerută. În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".
Restricţii şi precizări
- 1 ⩽ n ⩽ 1000
- elementele vectorului vor fi cuprinse între 1 și 1.000.000.000
Exemple
Exemplul 1
- Intrare
- 6
- 10 3 6 17 9 11
- Ieșire
- Datele sunt introduse corect.
- 2
Explicație exemplul 1
Perechile de elemente cu aceeași sumă a divizorilor sunt:
10 17 – cu suma 18
6 11 – cu suma 12
Exemplul 2
- Intrare
- 5
- 10 2 -3 4 5
- Ieșire
- Datele nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 4110
import math
def suma_divizorilor(n):
sumdiv = 0 for d in range(1, int(math.sqrt(n))+1): if n % d == 0: sumdiv += d if d != n // d: sumdiv += n // d return sumdiv
def cate_perechi_cu_aceeasi_suma_diviz(vector, n):
s = [suma_divizorilor(x) for x in vector] c = 0 for i in range(n): for j in range(i+1, n): if s[i] == s[j]: c += 1 print(c)
def citire_conform_restrictiilor():
n = int(input()) if n < 1 or n > 1000: print("Datele nu corespund restricțiilor impuse.") exit() vector = list(map(int, input().split())) for x in vector: if x < 1 or x > 1000000000: print("Datele nu corespund restricțiilor impuse.") exit() if n != len(vector): print("Datele nu corespund restricțiilor impuse.") exit() print("Datele sunt introduse corect.") return vector, n
vector, n = citire_conform_restrictiilor()
cate_perechi_cu_aceeasi_suma_diviz(vector, n)
</syntaxhighlight>