Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Worg
- */
- #include <vector>
- #include <fstream>
- #include <algorithm>
- std::ifstream fin("veterani.in");
- std::ofstream fout("veterani.out");
- const int MOD = 666013;
- std::vector<int> fact;
- void precalculate_factorials(int limit) {
- fact = std::vector<int>(limit, 0);
- fact[0] = 1;
- for (int i = 1; i < limit; i++) {
- fact[i] = 1LL * fact[i - 1] * i % MOD;
- }
- }
- int raise_to_power(long long base, long long exp) {
- long long ans = 1, aux = base;
- for (long long i = 1; i <= exp; i <<= 1) {
- if (i & exp) {
- ans = ans * aux % MOD;
- }
- aux = aux * aux % MOD;
- }
- return ans;
- }
- int modular_inverse(int value) {
- return raise_to_power(value, MOD - 2);
- }
- int compute_comb(int n, int k) {
- int answer = 1LL * fact[n] * modular_inverse(fact[k]) * modular_inverse(fact[n - k]) % MOD;
- return answer;
- }
- int main() {
- int m, n;
- fin >> m >> n;
- precalculate_factorials(m + n + 1);
- int answer = 0;
- for (int k = 0; k <= std::min(n, m); k++) {
- int product = 1LL * compute_comb(m + n - k, m) * compute_comb(m, k) % MOD;
- answer += product;
- if (answer >= MOD) {
- answer -= MOD;
- }
- }
- fout << answer << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement