Cod sursa(job #1419320)

Utilizator alex.vasiuVasiu Alexandru alex.vasiu Data 15 aprilie 2015 13:07:20
Problema Sandokan Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>

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

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

    }
}

long long int modularInverse(long long int a, long long int p)
{
    long long 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;
    }
    long long int m=2000003;
    b=modularInverse(b,m);
    c=modularInverse(c,m);
    g<<((long long int)(a*b*c))%m;
    }
}