Cod sursa(job #2212299)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 13 iunie 2018 19:14:14
Problema Kperm Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

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

typedef long long ll;

const ll MOD=666013;

ll n,k;

ll fact(ll x)
{
    ll ans=1,i;
    for(i=1;i<=x;i++)
        ans=(ll)ans*i%MOD;
    return ans;
}

ll expow(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b%2==1)
            ans=(ll)ans*a%MOD;
        a=(ll)a*a%MOD;
        b/=2;
    }
    return ans;
}

int main()
{
    fin>>n>>k;
    if(n%k==0)
    {
        ll ans=1;
        ans*=(ll)fact(k);ans%=(ll)MOD;
        ans*=(ll)expow(fact(n/k),k);ans%=(ll)MOD;
        fout<<ans<<"\n";
    }
    else
    {
        ll rest=n%k;
        ll ans=1;
        ans*=(ll)fact(rest);ans%=(ll)MOD;
        ans*=(ll)expow(fact(n/k+1),rest);ans%=(ll)MOD;
        ans*=(ll)fact(k-rest);ans%=(ll)MOD;
        ans*=(ll)expow(fact(n/k),k-rest);ans%=(ll)MOD;
        fout<<ans<<"\n";
    }
    return 0;
}
/**

8
1 2 7 3 4 8 5 6


**/