Cod sursa(job #1058667)

Utilizator thewildnathNathan Wildenberg thewildnath Data 15 decembrie 2013 19:28:21
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h>

#define MOD 1000000007
#define MAX 1000000

int n,k;
long long a,sol,fact[MAX+10];
long long inv;

inline long long putere(long long a,int p)
{
    long long sol=1;
    for(;p;p>>=1)
    {
        if(p&1)
            sol=(sol*a)%MOD;
        a=(a*a)%MOD;
    }
    return sol;
}

inline long long inv_mod(long long n)
{
    return putere(n,MOD-2);
}

//   ((K!) ^ (N/K)) * ((K!) / ((K - N % K)!))

int main()
{
    freopen("cabana.in","r",stdin);
    freopen("cabana.out","w",stdout);
    int t,i,p,r;

    fact[0]=1;
    for(i=1;i<=MAX;++i)
        fact[i]=(fact[i-1]*i)%MOD;

    scanf("%d",&t);
    while(t--)
    {
        sol=1;
        scanf("%lld%lld",&n,&k);
        p=n/k;
        r=n%k;
        a=fact[k];

        sol=putere(a,p);

        a=fact[k-r];
        a=(fact[k]*inv_mod(a));

        sol=(sol*a)%MOD;

        printf("%lld\n",sol);
    }
    return 0;
}