1981 - Divizori sir

De la Universitas MediaWiki

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 dintre cele n, separate prin spații.

Restricții și precizări

  • 0 < n < 60

Exemplul 1

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

Exemplul 2

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

Explicație

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

Rezolvare

# 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.")