1981 - Divizori sir

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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