Pagini recente » Cod sursa (job #732504) | Cod sursa (job #1368854) | Cod sursa (job #761839) | Cod sursa (job #955519) | Cod sursa (job #1056395)
#include <fstream>
using namespace std;
const int MOD = 1000000007;
const int MAX_K = 1000002;
int T;
int fact[MAX_K];
long long N, K;
inline long long expo(long long a, long long b) {
long long res = 1;
while(b) {
if(b % 2) {
res = (long long) (res * a);
res %= MOD;
}
a = (long long) (a * a);
a %= MOD;
b /= 2;
}
return res;
}
int main() {
ifstream f("cabana.in");
ofstream g("cabana.out");
fact[1] = 1;
for(int i = 2; i < MAX_K; ++i) {
long long temp = (long long) fact[i - 1] * i;
fact[i] = temp % MOD;
}
f >> T;
for(int t = 1; t <= T; ++t) {
f >> N >> K;
long long sol = 1, Kfact = fact[K], x = N / K, temp;
temp = (long long) expo(Kfact, x + 1);
sol = (long long) sol * temp;
sol %= MOD;
N -= (long long) x * K;
sol = (long long) sol * expo(fact[K - N], MOD - 2);
sol %= MOD;
g << sol << "\n";
}
f.close();
g.close();
return 0;
}