Cod sursa(job #3151985)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 23 septembrie 2023 13:56:44
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>

using namespace std;

ifstream cin("sandokan.in");
ofstream cout("sandokan.out");

const int MOD = 2000003;
int n, k;

int Power(int a, int b)
{
    int rez = 1;
    while(b)
    {
        if(b % 2 == 1)
            rez = ((long long) rez * a) % MOD;
        a = ((long long) a * a) % MOD;
        b /= 2;
    }
    return rez;
}

int Combinari(int n, int k)
{
    int a = 1, b = 1, c = 1;
    for(int i = 1; i <= n; i++)
        a = ((long long) a * i) % MOD;
    for(int i = 1; i <= k; i++)
        b = ((long long) b * i) % MOD;
    for(int i = 1; i <= n - k; i++)
        c = ((long long) c * i) % MOD;

    int answer = a;
    answer = ((long long) answer * Power(b, MOD - 2)) % MOD;
    answer = ((long long) answer * Power(c, MOD - 2)) % MOD;
    return answer;
}

int main()
{
    cin >> n >> k;
    
    int R = (n - k) / (k - 1) + 1;
    int ramase = n - R * (k - 1);
    cout << Combinari(n - 1, ramase - 1);

    return 0;
}