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