Cod sursa(job #3151989)

Utilizator ungureanubogdan07Ungureanu Bogdan ungureanubogdan07 Data 23 septembrie 2023 14:02:06
Problema Sandokan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#define MOD 200003

using namespace std;

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

int fact[5001];

void euclid(int a, int b, int & x, int & y)
{
    if(b == 0) {x = 1, y = 1; return;}
    int X, Y;
    euclid(b, a % b, X, Y);
    x = Y;
    y = X - a / b * Y;
}

int impartire(int a, int b)
{
    int invers, aux;
    euclid(b, MOD, invers, aux);
    while(invers < 0) invers += MOD;
    return 1ll * a * invers % MOD;
}

int combinari(int n, int k)
{
    return impartire(impartire(fact[n], fact[k]), fact[n - k]);
}

int main()
{
    fact[0] = fact[1] = 1;
    for(int i = 2; i <= 5000; ++i) fact[i] = (1ll * i * fact[i - 1]) % MOD; 
    int n, k; cin >> n >> k;
    int rez = 1;
    while(n >= k) {
        rez *= combinari(n, k);
        n -= k - 1;
    }
    cout << rez;
    return 0;
}