Pagini recente » Cod sursa (job #1266928) | Cod sursa (job #2255083) | Cod sursa (job #2870146) | Cod sursa (job #591470) | Cod sursa (job #1300839)
#include <cstdio>
using namespace std;
#define LL long long
#define MOD 1000000007
#define NMAX 1000001
LL N,K,T,i;
int ins;
int fact[NMAX],inv[NMAX];
int SQR(int value)
{
return (1LL*value*value)%MOD;
}
int lgPut(LL N,LL P)
{
int i,sol=1;
for (i=0;(1LL<<i)<=P;++i)
{
if ( ((1<<i) & P)>0 ) sol=(1LL*sol*N)%MOD;
N=(N*N)%MOD;
}
return sol;
}
int solve (LL N,LL K)
{
if (N%K==0)
return lgPut(fact[K],N/K);
return (1LL*lgPut(fact[K],N/K+1)*lgPut(fact[K-N%K],MOD-2))%MOD;
}
int main()
{
freopen("cabana.in","r",stdin);
freopen("cabana.out","w",stdout);
for (i=2,fact[1]=1;i<NMAX;++i)
fact[i]=(1LL*fact[i-1]*i)%MOD;
for (scanf("%d",&T);T;--T)
{
scanf("%lld%lld",&N,&K);
printf("%d\n",solve(N,K));
}
return 0;
}