FZU - 2020 组合
2015-03-29 02:50
337 查看
组合
Submit Status
Description
给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是xiaobo希望你输出 C(n,m) mod p的值!
Input
输入数据第一行是一个正整数T,表示数据组数 (T <= 100) 接下来是T组数据,每组数据有3个正整数 n, m, p (1 <= m <= n <= 10^9, m <= 10^4, m < p < 10^9, p是素数)
Output
对于每组数据,输出一个正整数,表示C(n,m) mod p的结果。
Sample Input
25 2 35 2 61
Sample Output
110
Time Limit: 1000MS | Memory Limit: 32768KB | 64bit IO Format: %I64d & %I64u |
Description
给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是xiaobo希望你输出 C(n,m) mod p的值!
Input
输入数据第一行是一个正整数T,表示数据组数 (T <= 100) 接下来是T组数据,每组数据有3个正整数 n, m, p (1 <= m <= n <= 10^9, m <= 10^4, m < p < 10^9, p是素数)
Output
对于每组数据,输出一个正整数,表示C(n,m) mod p的结果。
Sample Input
25 2 35 2 61
Sample Output
110
#include<iostream> //这m不大,可以用公式3 using namespace std; long long int pow_mod(long long int x, long long int n, long long int p) //快速幂 { long long int ret = 1; x %= p; while (n) { if (n % 2 == 1) { ret = ret*x%p; n--; } n /= 2; x = x*x%p; } return ret; } long long int C(long long int n,long long int m, long long int p) { if (m > n) return 0; long long int ans = 1; for (int i = 1; i <= m; i++) { long long int a = (n + i - m) % p; long long int b = i%p; ans = ans*(a*pow_mod(b, p - 2, p) % p) % p; } return ans; } int main() { int casen; long long int n, m, p; cin >> casen; while (casen--) { cin >> n >> m >> p; cout << C(n, m, p) << endl; } }
相关文章推荐
- 【FZU 2015 && FZU 2020 】 组合+大数取模
- FZU 2020 组合(扩展欧几里得)
- 【Lucas组合数定理】组合-FZU 2020
- FZU - 2020 组合(逆元+卢卡斯)
- FZU 2020 组合(Lucas定理的应用)
- FZU 2020 组合(Lucas定理)
- fzu 2020 组合数取模
- FZU 2020 组合 lucas
- FZU 2020 :组合 【lucas】
- FZU 2020 组合 (Lucas定理)
- FZU 2020 组合
- FZU 2020 组合 lucas定理
- FZU 2020 组合
- FZU 2020 组合
- FZU 2020 组合 [ Lucas ]
- fzu 2020 组合 组合数对素数取余
- FZU 2020 组合数求模
- FZU 2020 组合 -- (大组合数取模 Lucas定理)
- hdu 3037 Saving Beans fzu 2020 组合 hit 2813 Garden visiting hrbeu 组合数 fzu 1564 Combination
- 【Lucas定理 && C(n, m)%p && 逆元】FZU - 2020 组合