Cod sursa(job #1585309)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 30 ianuarie 2016 22:10:23
Problema Kperm Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>

using namespace std;

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

typedef long long i64;

const int nmax = 5000;
const int mod = 666013;
i64 p[ nmax + 1 ];

i64 lgput( i64 b, int e ) {
    i64 sol = 1;
    while ( e > 0 ) {
        if ( e & 1 ) {
            sol = ( sol * b ) % mod;
        }
        e >>= 1;
        b = ( b * b ) % mod;
    }
    return sol;
}
int main() {
    int n, k, a, b, c, d;
    fin >> n >> k;
    a = n % k;
    if ( a == 0 ) {
        a = k;
    }
    b = k - a;
    c = n / k + 1;
    d = c - 1;

    p[ 0 ] = 1;
    for( int i = 1; i <= nmax; ++ i ) {
        p[ i ] = (p[ i - 1 ] * i) % mod;
    }

    i64 ans = ( p[ a ] * lgput( p[ c ], a ) ) % mod;
    ans *= ( p[ b ] * lgput( p[ d ], b ) ) % mod;
    ans %= mod;
    fout << ans << "\n";
    fin.close();
    fout.close();
    return 0;
}