1160 - Necuatie

De la Universitas MediaWiki
Versiunea din 26 decembrie 2023 15:19, autor: Raul (discuție | contribuții) (Pagină nouă: = Cerința = Se dă <code>n</code> un număr natural nenul. Să se afle câte soluții are ecuația <code>x<sub>1</sub>+x<sub>2</sub>+...+x<sub>n</sub>=0</code> în mulțimea <code>{-1,0,1}</code>. = Date de intrare = Fișierul de intrare <code>necuatie.in</code> conține pe prima linie numărul <code>n</code>. = Date de ieșire = Fișierul de ieșire <code>necuatie.out</code> va conține pe prima linie numărul <code>S</code>, reprezentând numărul soluțiilor ecuației...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

Se dă n un număr natural nenul. Să se afle câte soluții are ecuația x1+x2+...+xn=0 în mulțimea {-1,0,1}.

Date de intrare

Fișierul de intrare necuatie.in conține pe prima linie numărul n.

Date de ieșire

Fișierul de ieșire necuatie.out va conține pe prima linie numărul S, reprezentând numărul soluțiilor ecuației modulo 555557.

Restricții și precizări

  • 1 ≤ n ≤ 2000

Exemplu:

necuatie.in

3

necuatie.out

7

Explicație

Soluțiile ecuației x1+x2+x3=0 în mulțimea { -1 , 0 , 1 } sunt: (0,0,0) , (0,1,-1) , (0,-1,1) , (1,0,-1) , (-1,0,1) , (1,-1,0) , (-1,1,0).

Încărcare soluție

Lipește codul aici

MOD = 555557
n = int(input())
S = 1

def Invers(a):
    r = 1
    n = MOD - 2
    while n > 0:
        if n % 2 == 1:
            r = (r * a) % MOD
        a = (a * a) % MOD
        n //= 2
    return r

def combinari(n, k):
    P = 1
    Q = 1
    for i in range(1, k+1):
        P = (P * (n - i + 1)) % MOD
        Q = (Q * i) % MOD
    return (P * Invers(Q)) % MOD

for i in range(1, n // 2 + 1):
    S = (S + (combinari(n, i) * combinari(n - i, i)) % MOD) % MOD

print(S)