Cod sursa(job #1255998)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 5 noiembrie 2014 17:55:07
Problema Kperm Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 50011
#define MOD 666013
using namespace std;
ifstream f("kperm.in");
ofstream g("kperm.out");
int n,c,k,r,q1,q2,q3,q4;

vector<int> p;
bitset<DIM> viz;

void ciur(){
    for(register int i=2;i<n+11;i++)
        if(!viz[i]){
            p.push_back(i);
            for(register int j=i+i;j<n+11;j+=i) viz[j]=1;
        }
}

inline int up(int a,int b){
    if(b==1)
        return a;
    else{
        int q=up(a,b/2);
        q*=q,q%=MOD;
        if(b%2) q*=a;
        return q%MOD;
    }
}

inline int factorial(int x){
    int i,k,t,sol=1;
    for(i=0;i<p.size() && p[i]<=x;i++){
        k=p[i],t=0;
        while(k<=x)
            t+=x/k,k*=p[i];
        sol*=up(p[i],t);
        sol%=MOD;
    }
    return sol;
}

int main(void){

    f>>n>>k
    if(!k){
        g<<"0";
        return 0;
    }
    ciur();
    r=n%k,c=n/k;
    q1=factorial(r),q2=factorial(k-r);
    q3=factorial(c+1),q3=up(q3,r);
    q4=factorial(c),q4=up(q4,k-r);
    q1=(((q1*q2)%MOD)*((q3*q4)%MOD))%MOD;
    g<<q1;
    return 0;
}