Pagini recente » Cod sursa (job #1930182) | Cod sursa (job #2324177) | Cod sursa (job #805907) | Cod sursa (job #2162959) | Cod sursa (job #1210509)
#include <cstdio>
using namespace std;
#define LL long long
#define MOD 1000000007
#define NMAX 1000001
LL N,K,T,i;
LL fact[NMAX];
void Gcd(LL A,LL B,LL &Inv,LL &Ins)
{
LL HInv=0;
if (!B)
{
Inv=1;
Ins=0;
return ;
}
Gcd(B,A%B,Inv,Ins);
HInv=Inv;
Inv=Ins;
Ins=HInv-Ins*(A/B);
}
LL invers(LL X)
{
LL Inv=0,Ins=0;
Gcd(X,MOD,Inv,Ins);
while (Inv<0)
Inv+=MOD;
return Inv;
}
LL pow(LL X,LL T)
{
LL ans=1;
for (LL i=1;i<=T;++i)
ans=(ans*X)%MOD;
return ans;
}
LL solve (LL N,LL K)
{
if (N%K==0)
return pow(fact[K],N/K);
return pow(fact[K],N/K+1)*invers(fact[(K-N%K)]);
}
int main()
{
freopen("cabana.in","r",stdin);
freopen("cabana.out","w",stdout);
scanf("%lld",&T);
for (i=2,fact[1]=1;i<NMAX;++i)
fact[i]=(fact[i-1]*i)%MOD;
while (T--)
{
scanf("%lld%lld",&N,&K);
printf("%lld\n",solve(N,K));
}
return 0;
}