3630 - codred
De la Universitas MediaWiki
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.