Cod sursa(job #1062069)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 20 decembrie 2013 17:55:56
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#define MOD 666013
using namespace std;
ifstream f("kperm.in");
ofstream g("kperm.out");
long long Fact[5005];
long long N,K;
long long power_log(long long n,long long p)// afiseaza n la puterea p modulo mod, ridicarea se face in timp logaritmic
{
    long long sol=1;
    while(p)
    {
        if(p%2==1)
            sol=(sol*n)%MOD;
        n=(n*n)%MOD;p=p/2;
    }
    return sol;
}
void Precalculate()
{
    long long i;
    Fact[0]=1;
    for(i=1;i<=5000;i++)
    {
        Fact[i]=Fact[i-1]*i;
        Fact[i]%=MOD;
    }
}
void Solve()
{
    long long rest=N%K;
    long long result=0;
    if(K%2==1)
    {
        result=power_log(Fact[N/K+1],rest)*power_log(Fact[N/K],K-rest);
        result%=MOD;
        result*=Fact[K-N%K]*Fact[N%K];
        result%=MOD;
    }
    g<<result<<"\n";
}
int main()
{
    f>>N>>K;
    Precalculate();
    Solve();
    return 0;
}