Cod sursa(job #1056395)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 14 decembrie 2013 13:01:28
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#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;
}