题目链接:https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1549 题目大意 给你n,m,p,要你求组合数C(n, m)%p 范围:(1 <= m <= n <= 10^9, m <= 10^4, 0< p <100 , p是素数) 思路 n和m范围很大,直接求C会t,但是这里模数p很小,那么可以从p下手。 C(n, m) = n!
需要特判n < m的时候,return 0 #include<bits/stdc++.h>#define endl '\n'#define int int64_tusing namespace std;const int N = 1e6 + 5;int f[N], g[N],mod;int qpow(int a, int b) {int res = 1;while (b) {if (
inv[i] = ( MOD - MOD / i ) * inv[MOD%i] % MOD 证明: 设t = MOD / i , k = MOD % i 则有 t * i + k == 0 % MOD 有 -t * i == k % MOD 两边同时除以ik得到:-t * inv[k] == inv[i] % MOD 即 inv[i] == -MOD / i * inv[MOD%i]