Cod sursa(job #2011813)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 17 august 2017 12:14:21
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;
ifstream f("sandokan.in");
ofstream g("sandokan.out");
void euclid(long long a,long long b,long long &x,long long &y)
{
    if(!b)
    {
        x=1;
        y=0;
    }
    else
    {
        long long x0,y0;
        euclid(b,a%b,x0,y0);
        x=y0;
        y=x0-(a/b)*y0;
    }
}
long long modularInverse(long long a, long long p)
{
    long long 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 m=2000003;
    long long 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;
}