Cod sursa(job #3188974)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 4 ianuarie 2024 11:19:48
Problema Sandokan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

const long long max_size = 5e3 + 20, mod = 2e6 + 3;

long long fact[max_size];

long long lgput (long long baza, long long e)
{
    long long ans = 1;
    while (e > 0)
    {
        if (e % 2 == 1)
        {
            ans = (ans * baza) % mod;
        }
        baza = (baza * baza) % mod;
        e /= 2;
    }
    return ans;
}

long long comb (long long n, long long k)
{
    long long ans = (fact[n] * lgput(fact[k], mod - 2)) % mod;
    ans = (ans * lgput(fact[n - k], mod - 2)) % mod;
    return ans;
}

void solve ()
{
    long long n, k;
    cin >> n >> k;
    fact[0] = 1;
    for (long long i = 1; i <= n; i++)
    {
        fact[i] = (fact[i - 1] * i) % mod;
    }
    long long r = (n - 1) % (k - 1) + 1;
    cout << comb(n - 1, r - 1);
    //cout << '\n';
}

signed main ()
{
#ifdef LOCAL
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);
#else
    freopen("sandokan.in", "r", stdin);
    freopen("sandokan.out", "w", stdout);
#endif // LOCAL
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    long long t;
    //cin >> t;
    t = 1;
    while (t--)
    {
        solve();
    }
    return 0;
}