Cod sursa(job #1586379)

Utilizator Debuger33Numarul1 Debuger33 Data 1 februarie 2016 06:58:11
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin ("kperm.in");
ofstream fout ("kperm.out");

#define max(x,y) x<y?y:x;

const int mod = 666013 ;

long long int  factorial[5100];

long long int putere (long long  int x ,long long int y)
	  
{
	  long long int  put = 1;

	  while(y)
	  {
		    if (y%2)
		    {
				put = (put*x)%mod;
		    }

		    y = y/2;

		    x=(x*x)%mod;

	  }
	  return put ;
}

int main()
{
	  long long int  n ,k ,m ,r ;
	  fin >> n >> k;
	  fin.close();

	  if(k % 2  == 0)
	  {
		  fout << 0 ;
		  return 0;
		  fout.close();
	  }


	  m = n/k;
	  r = n%k;

	  long long int  maxim = max(m+1,k-r);
	  maxim = max(maxim,r);

	  factorial[0]=1;
	  factorial[1]=1;

	  for ( int i =2 ; i <=maxim ; i++)
		    factorial[i] = (i*factorial[i-1])%mod;

	  if( n == k)
	  {
		    fout << factorial[n];
	  }
	  else
	  {


	  long long int putere1 = putere ( factorial[m+1] ,r);
	  long long int  putere2 = putere ( factorial[m] , k-r);

	  long long int rez = (factorial[r]*factorial[k-r])%mod;
	  rez = (rez*putere2)%mod;
	  rez = (rez*putere1)%mod;

	  fout << rez;
	  }

	  fout.close();

	  return 0;
}