Cod sursa(job #1062061)

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