Cod sursa(job #1419316)

Utilizator alex.vasiuVasiu Alexandru alex.vasiu Data 15 aprilie 2015 13:04:59
Problema Sandokan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>

using namespace std;
ifstream f("sandokan.in");
ofstream g("sandokan.out");
void euclid(int a, int b, int &x, int &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    else
    {
        int x0, y0;
        int d = euclid(b, a % b, x0, y0);

        x = y0;
        y = x0 - (a / b) * y0;

    }
}

int modularInverse(int a, int p)
{
    int x, y;
    euclid(a, p, x, y);

    if (x < 0)
        x = x + p;

    return x;
}
int main()
{
    int n,k;
    f>>n>>k;
    f.close();
    k=(n%(k-1)-1);
    n--;
    if(k<=0)
        g<<"1";
    else
    {
    long long int a=1,b=1,c=1;
    for(int i=2;i<=n;i++)
    {
        a*=i;
        if(i<=k)
            b*=i;
        if(i<=n-k)
            c*=i;
    }
    b=modularInverse(b,2 000 003);
    c=modularInverse(c,2 000 003);
    g<<((long long int)(a*b*c))%2000003;
    }
}