4105 - NumarareDiv
Sursa: 4105 - NumarareDiv
Cerinţa
Se dă un vector cu n numere naturale. Să se determine câte dintre perechile de elemente din vector au același număr de divizori.
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
- 13 3 8 7 9 25
- Ieșire
- Datele sunt introduse corect.
- 4
Explicație exemplul 1
Perechile de elemente cu același număr de divizori sunt:
13 3 – cu câte 2 divizori fiecare
13 7 – cu câte 2 divizori fiecare
3 7 – cu câte 2 divizori fiecare
9 25 – cu câte 3 divizori fiecare
Exemplul 2
- Intrare
- 5
- 10 2 -3 4 5
- Ieșire
- Datele nu corespund restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 4105
def numar_divizori(n):
divizori = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
divizori += 1
if i * i != n:
divizori += 1
return divizori
def cate_perechi_cu_acelasi_nr_divizori(vector, n):
s = [numar_divizori(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
if __name__ == '__main__':
vector, n = citire_conform_restrictiilor() cate_perechi_cu_acelasi_nr_divizori(vector, n)
</syntaxhighlight>