3630 - codred: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == 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 95 == Exemplu 2 == ; Intrare 100000000 ; Iesire Datele de intrare nu corespund restrictiilor imp...)
 
Fără descriere a modificării
Linia 7: Linia 7:
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* '''1 ⩽ n ⩽ 10.000.000'''
* '''1 ⩽ n ⩽ 10.000.000'''
== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
Linia 13: Linia 12:
; Iesire
; Iesire
  95
  95
== Exemplu 2 ==
== Exemplu 2 ==
; Intrare
; Intrare
Linia 19: Linia 17:
; Iesire
; Iesire
  Datele de intrare nu corespund restrictiilor impuse
  Datele de intrare nu corespund restrictiilor impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
Linia 54: Linia 50:
     main()
     main()
</syntaxhighlight>
</syntaxhighlight>
== Explicatie ==
== Explicatie ==
  Suma este '''1!⋅3+2!⋅7+3!⋅13=3+14+78=95'''.
  Suma este '''1!⋅3+2!⋅7+3!⋅13=3+14+78=95'''.

Versiunea de la data 2 ianuarie 2024 21:26

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