3630 - codred
Cerinţa[edit | edit source]
Se dă n un număr natural. Să se calculeze suma ∑nk=1(k!⋅(k2+k+1)).
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran valoarea sumei, modulo 1.000.000.007.
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n ⩽ 10.000.000
Exemplul 1[edit | edit source]
- Intrare
3
- Iesire
Datele de intrare corespund restrictiilor impuse 95
Exemplu 2[edit | edit source]
- Intrare
100000000
- Iesire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> 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()
</syntaxhighlight>
Explicatie[edit | edit source]
Suma este 1!⋅3+2!⋅7+3!⋅13=3+14+78=95.