Cod sursa(job #1419322)

Utilizator alex.vasiuVasiu Alexandru alex.vasiu Data 15 aprilie 2015 13:10:45
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 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)
        k=0;
     long long int m=2000003;
    long long int a=1,b=1,c=1;
    for(int i=2;i<=n;i++)
    {
        a=a*i%m;
        if(i<=k)
            b=b*i%m;
        if(i<=n-k)
            c=c*i%m;
    }

    b=modularInverse(b,m);
    c=modularInverse(c,m);
    g<<((long long int)(a*b*c))%m;

}