3630 - codred

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ă n un număr natural. Să se calculeze suma ∑nk=1(k!⋅(k2+k+1)).

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran valoarea sumei, modulo 1.000.000.007.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 10.000.000

Exemplul 1

Intrare
3
Iesire
Datele de intrare corespund restrictiilor impuse
95

Exemplu 2

Intrare
100000000
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

def factorial(n, mod):
    fact = 1
    for i in range(1, n + 1):
        fact = (fact * i) % mod
    return fact


def compute_sum(n):
    mod = 1000000007
    suma = 0
    for k in range(1, n + 1):
        term = (factorial(k, mod) * (k*k + k + 1)) % mod
        suma = (suma + term) % mod
    return suma


def main():
    n = int(input())

    if n > 10000000:
        print("Datele de intrare nu corespund restrictiilor impuse")
        return

    suma = compute_sum(n)
    print("Datele de intrare corespund restrictiilor impuse")
    print(suma)


if __name__ == "__main__":
    main()

Explicatie

Suma este 1!⋅3+2!⋅7+3!⋅13=3+14+78=95.