Cod sursa(job #1556621)

Utilizator Debuger3Numarul 1 Debuger3 Data 25 decembrie 2015 15:29:12
Problema Kperm Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 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 ;

int factorial[5000];

int putere ( int x , 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()
{
	  int n ,k ,m ,r ;
	  fin >> n >> k;
	  fin.close();

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

	  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;

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

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

	  fout << rez;
	  fout.close();

	  return 0;
}