2420 - EasyRow
De la Universitas MediaWiki
Cerința
Se consideră următorul șir de numere naturale: 1 3 5 8 10 14 16..., în care termenul de pe poziția i (i > 1) este egal cu cel precedent plus numărul de divizori ai lui i. Afișați al n-lea termen.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran numărul x, reprezentând al n-lea termen din șir.
Restricții și precizări
1 ≤ n ≤ 100.000
Exemplul 1
- Intrare
- 5
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 10
Exemplul 2
- Intrare
- -10
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
#2420 - EasyRow
def numar_divizori(n):
count = 0
for i in range(1, n + 1): # se parcurge intervalul [1, n]
if n % i == 0: # se verifică dacă i este divizor al lui n
count += 1 # dacă da, se adaugă 1 la numărul total de divizori
return count # numărul total de divizori
def n_termen(n):
if n == 1:
return 1
else:
previous_termen = n_termen(n - 1) # se calculează termenul anterior
return previous_termen + numar_divizori(n) # se calculează termenul curent adunând numărul de divizori ai lui n
if __name__ == "__main__":
n = int(input("Introduceti n: "))
if n >= 1:
termen = n_termen(n)
print("Datele de intrare corespund restricțiilor impuse.")
print(f"Termenul de pe pozitia {n} este {termen}.")
else:
print("Datele de intrare nu corespund restricțiilor impuse.")