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