Cod sursa(job #779714)

Utilizator SteveStefan Eniceicu Steve Data 18 august 2012 16:39:13
Problema Dirichlet Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

#define mod 9999991

int N;

void Citire () {
    ifstream fin ("dirichlet.in");
    fin >> N;
    fin.close ();
}

int Business () {
    long long NFact = 1;
    long long v[25];
    for (int i = 2; i <= N; i++)
    {
        NFact = (NFact * i) % mod;
    }
    long long InvN = 1;
    v[0] = NFact;
    for (int i = 1; i <= 23; i++)
    {
        v[i] = (v[i - 1] * v[i - 1]) % mod;
    }
    //1, 2, 4, 8
    int Numar = mod - 2;
    for (int i = 23; i >= 0; i--)
    {
        if (Numar >= 1 << i) InvN = (InvN * v[i]) % mod, Numar -= 1 << i;
    }
    NFact = 1;
    for (int i = N + 2; i <= N << 1; i++)
    {
        NFact = (NFact * i) % mod;
    }
    return (NFact * InvN) % mod;
}

void Scriere () {
    ofstream fout ("dirichlet.out");
    fout << Business ();
    fout.close ();
}

int main () {
    Citire ();
    Scriere ();
    return 0;
}