Cod sursa(job #1824594)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 8 decembrie 2016 01:14:54
Problema Kperm Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long i64;

const int MOD = 666013;

int fact[5005];

i64 expow(i64 b, int e) {
    i64 ant = 1LL;

    for (; e; e>>= 1) {
        if (e & 1)
            ant = (ant * b) % MOD;
        b = (b * b) % MOD; }

    return ant; }

int main(void) {
    ifstream fi("kperm.in");
    ofstream fo("kperm.out");
    int n, k;
    i64 ant;

    fi >> n >> k;

    if (k % 2 == 0) {
        fo << 0 << '\n';
        return 0; }

    fact[0] = 1;
    for (int i = 1; i <= n; ++i)
        fact[i] = (1LL * i * fact[i - 1]) % MOD;

    ant = fact[n % k] * fact[k - n % k];
    ant = (ant * expow(fact[n / k + 1], n % k)) % MOD;
    ant = (ant * expow(fact[n / k], k - n % k)) % MOD;

    fo << ant << '\n';

    return 0; }