1981 - Divizori sir: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dă următorul șir de numere naturale: '''1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…''' Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului. == Date de intrare == Programul citește de la tastatură numărul '''n'''; == Date de ieşire == Programul va afișa pe ecran cele '''n''' numere, reprezentând numărul de divizori ai fiecarui numar dint...
 
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 11: Line 11:
== Restricții și precizări ==
== Restricții și precizări ==
* '''0 < n < 60'''
* '''0 < n < 60'''
== Exemplu ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: 4
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 1 2 3 3
: 1 2 3 3
== Exemplul 2 ==
; Intrare
: -1
; Ieșire
: Datele introduse nu corespund restricțiilor impuse.
== Explicație ==
== Explicație ==
* 1 are un divizor,
* 1 are un divizor,
Line 21: Line 27:
* 9 are 3 divizori,
* 9 are 3 divizori,
* 25 are 3 divizori.
* 25 are 3 divizori.
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def numar_divizori(n):
# 1981 - Divizori sir
def verificare_restrictii(n1):
    # functia de verificare a datelor de intrare
    if 0 < n1 < 60:
        return True
    else:
        return False
 
 
def numar_divizori(n1):
     # Initializam sirul de numere
     # Initializam sirul de numere
     sir = [2, 4]
     sir = [2, 4]
     # Generam primii n termeni ai sirului
     # Generam primii n termeni ai sirului
     for i in range(2, n):
     for i in range(2, n1):
         sir.append(2 * sir[i - 1] + 2 * sir[i - 2])
         sir.append(2 * sir[i - 1] + 2 * sir[i - 2])
     # Calculam numarul de divizori pentru fiecare termen al sirului
     # Calculam numarul de divizori pentru fiecare termen al sirului
     divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir]
     divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir]
     return divizori
     return divizori


if __name__ == "__main__":
if __name__ == "__main__":
     # Citim datele de intrare
     try:
    n = int(input())
        # Citim datele de intrare
    # Calculam numarul de divizori
        n = int(input())
    rezultat = numar_divizori(n)
        if verificare_restrictii(n):            # verificam datele de intrare
    # Afisam rezultatul
            print("Datele de intrare corespund restrictiilor impuse.")
    print(' '.join(map(str, rezultat)))
            # Calculam numarul de divizori
            rezultat = numar_divizori(n)
            # Afisam rezultatul
            print(' '.join(map(str, rezultat)))
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 13:16, 16 November 2023

Cerinţa[edit | edit source]

Se dă următorul șir de numere naturale:

1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…

Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n;

Date de ieşire[edit | edit source]

Programul va afișa pe ecran cele n numere, reprezentând numărul de divizori ai fiecarui numar dintre cele n, separate prin spații.

Restricții și precizări[edit | edit source]

  • 0 < n < 60

Exemplul 1[edit | edit source]

Intrare
4
Ieșire
Datele introduse corespund restricțiilor impuse.
1 2 3 3

Exemplul 2[edit | edit source]

Intrare
-1
Ieșire
Datele introduse nu corespund restricțiilor impuse.

Explicație[edit | edit source]

  • 1 are un divizor,
  • 3 are 2 divizori,
  • 9 are 3 divizori,
  • 25 are 3 divizori.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1981 - Divizori sir

def verificare_restrictii(n1):

   # functia de verificare a datelor de intrare
   if 0 < n1 < 60:
       return True
   else:
       return False


def numar_divizori(n1):

   # Initializam sirul de numere
   sir = [2, 4]
   # Generam primii n termeni ai sirului
   for i in range(2, n1):
       sir.append(2 * sir[i - 1] + 2 * sir[i - 2])
   # Calculam numarul de divizori pentru fiecare termen al sirului
   divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir]
   return divizori


if __name__ == "__main__":

   try:
       # Citim datele de intrare
       n = int(input())
       if verificare_restrictii(n):             # verificam datele de intrare
           print("Datele de intrare corespund restrictiilor impuse.")
           # Calculam numarul de divizori
           rezultat = numar_divizori(n)
           # Afisam rezultatul
           print(' '.join(map(str, rezultat)))
       else:
           print("Datele de intrare nu corespund restrictiilor impuse.")
   # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
   except ValueError:
       print("Datele de intrare nu corespund restrictiilor impuse.")
   except IndexError:
       print("Datele de intrare nu corespund restrictiilor impuse.")

</syntaxhighlight>