Cod sursa(job #1994798)

Utilizator GoogalAbabei Daniel Googal Data 26 iunie 2017 00:49:25
Problema Kperm Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

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

const int NMAX  = 5000;
const int MOD = 66013;

int fact[1 + NMAX];
int n, k;

void computef(){
  fact[0] = 1;
  for(int i = 1; i <= NMAX; i++)
    fact[i] = (1LL * fact[i - 1] * i) % MOD;
}

int power(int n, int k, int answer){
  if(k == 0)
    return answer;
  else
    return power(n, k - 1, (1LL * answer * n) % MOD);
}

int main()
{
  in >> n >> k;
  in.close();

  if((k % 2) == 0){
    out << 0;
    out.close();
    exit(EXIT_SUCCESS);
  }

  computef();
  if((n % k) == 0){
    out << (1LL * fact[k] * power(fact[n / k], k, 1)) % MOD;
  }else{
    int rem = n % k;
    int x = k - rem;
    int sol;
    sol = ((1LL * fact[rem] * fact[x]) % MOD);
    sol = ((1LL * sol * power(fact[n / k + 1], rem, 1)) % MOD);
    sol = ((1LL * sol * power(fact[n / k], x, 1)) % MOD);
    out << sol;
  }

  out.close();
  return 0;
}