4105 - NumarareDiv

From Bitnami MediaWiki
Revision as of 10:49, 22 March 2023 by Csatari Mălina (talk | contribs) (Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4105/numararediv 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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>

  1. 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>