Cod sursa(job #2931242)

Utilizator Gabriel_DascalescuGabriel Dascalescu Gabriel_Dascalescu Data 30 octombrie 2022 18:26:39
Problema Dirichlet Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#define mod 9999991

using namespace std;

ifstream in("dirichlet.in");
ofstream out("dirichlet.out");

long long exp(long long baza, long long putere)
{
    long long ans;
    ans = 1;
    while(putere>=1)
    {
        if(putere%2 == 1)
        {
            ans = (ans*baza)%mod;
        }
        baza = (baza*baza)%mod;
        putere/=2;
    }
    return ans;
}

long long n, doin , doin2, doin3, invm1, invm2;

///doin = factorial de 2n
///doin2 = factorial de n
///doin3 = factorial de n+1
///invm1 = inversmodular n
///invm2 = inversmodular n+1

int main()
{
    in>>n;
    doin = 1;
    doin2 = 1;
    doin3 = 1;
    invm1 = 1;
    invm2 = 1;
    for(int i=1; i<=2*n; i++)
    {
        doin = (doin*i)%mod;
        if(i<=n)
        {
            doin2 = (doin2 * i)%mod;
        }
        if(i<=n+1)
        {
            doin3 = (doin3 * i)%mod;
        }
    }
    invm1 = exp(doin2, mod-2);
    invm2 = exp(doin3, mod-2);
    //out<<doin3<<"\n";
    out<<(((invm1 * invm2) %mod) * doin)%mod;
    return 0;
}