Cod sursa(job #728223)

Utilizator danalex97Dan H Alexandru danalex97 Data 28 martie 2012 16:23:31
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
using namespace std;
ifstream F("sandokan.in");
ofstream G("sandokan.out");

#define Mod 2000003
#define max(a , b) ( ( a>b ) ? a : b ) 
#define min(a , b) ( ( a<b ) ? a : b ) 
#define ll long long

ll N,K;

ll Pow(int a,int b)
{
    ll x=1,y=a; 
    while ( b > 0)
	{
        if ( b%2 == 1) x=(x*y)%Mod;
        y = (y*y)%Mod; 
        b /= 2;
    }
    return x%Mod;
}

ll Comb(int N,int K)
{
	ll Rez1=1, Rez2=1,Rez3=1;
	for (int i=1;i<=N;++i)
		Rez1=( Rez1 * i ) % Mod;
	for (int i=1;i<=K;++i)
		Rez2=( Rez2 * i ) % Mod;
	for (int i=1;i<=N-K;++i)
		Rez3=( Rez3 * i ) % Mod;
	Rez2=( Rez2 * Rez3 ) % Mod;
	Rez2=( Pow( Rez2 , Mod-2 ) ) % Mod ;
	return ( Rez1 * Rez2 ) % Mod;
}

int main()
{
	F>>N>>K;
	if (N<=K)
		G<<"1\n";
	else
		G<<Comb(N-1,(N-1) %(K-1 ))<<'\n';
	
	F.close();
	G.close();
	return 0;
}