LightOJ - 1067 lucas定理 模板
2017-12-25 12:29
423 查看
Given n different objects, you want to take k of them. How many ways to can do it?
For example, say there are 4 items; you want to take 2 of them. So, you can do it 6 ways.
Take 1, 2
Take 1, 3
Take 1, 4
Take 2, 3
Take 2, 4
Take 3, 4
Input
Input starts with an integer T (≤ 2000), denoting the number of test cases.
Each test case contains two integers n (1 ≤ n ≤ 106), k (0 ≤ k ≤ n).
Output
For each case, output the case number and the desired value. Since the result can be very large, you have to print the result modulo 1000003.
Sample Input
3
4 2
5 0
6 4
Sample Output
Case 1: 6
Case 2: 1
Case 3: 15
题意:求C(n,m)%p;
代码:
For example, say there are 4 items; you want to take 2 of them. So, you can do it 6 ways.
Take 1, 2
Take 1, 3
Take 1, 4
Take 2, 3
Take 2, 4
Take 3, 4
Input
Input starts with an integer T (≤ 2000), denoting the number of test cases.
Each test case contains two integers n (1 ≤ n ≤ 106), k (0 ≤ k ≤ n).
Output
For each case, output the case number and the desired value. Since the result can be very large, you have to print the result modulo 1000003.
Sample Input
3
4 2
5 0
6 4
Sample Output
Case 1: 6
Case 2: 1
Case 3: 15
题意:求C(n,m)%p;
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> using namespace std; #define ll long long const int Max = 1e6; #define MOD 1000003 ll fac[Max]; void init(ll p) { fac[0] = 1; for(int i = 1; i <= p; i++) fac[i] = fac[i-1] * i % p; return; } ll _pow(ll x, ll y, ll p) { ll res = 1,tmp = x % p; while(y) { if(y & 1) res = res * tmp % p; tmp = tmp * tmp % p; y >>= 1; } return res; } ll C(ll n, ll m, ll p) { if(m > n) return 0; return fac * _pow(fac[m] * fac[n-m], p-2, p) % p; } ll lucas(ll n, ll m, ll p) { if(m == 0) return 1; return (C(n%p, m%p, p)*lucas(n/p, m/p, p))%p; } int main() { int t; cin >> t; int k = 0; init(MOD); while(t--) { k++; int n,m; cin >> n >> m; cout << "Case " << k << ": " << lucas(n, m, MOD) << endl; } return 0; }
相关文章推荐
- LightOJ1067 Combinations Lucas定理裸题
- LightOJ 1067 - Combinations (Lucas定理)
- 数学学习小记(二) 组合数求模:Lucas 定理 LightOJ 1067 + Hdu 3037
- LightOJ 1067 - Combinations【Lucas定理】
- [HDU 3461] Saving Beans & 组合计数Lucas定理模板
- BZOJ 4403 2982 Lucas定理模板
- LightOJ1067 Combinations[Lucas]
- 模板_Lucas定理
- HDU3037——Saving Beans(数论,组合数取模,lucas定理模板)
- Lucas定理模板
- LightOJ - 1067 (卢卡斯定理,打表法)
- Lightoj 1067【逆元模板(求C(N,M))】
- 【数论】Lucas定理推导过程+模板
- FZU 2020 组合(组合数 lucas定理模板题)
- hdu 3037 Saving Beans(lucas定理模板)
- Lucas定理模板【bzoj2982】【combination】
- LightOJ - 1319 Monkey Tradition (中国剩余定理 模板)
- 【LightOJ】1067 - Combinations(Lucas & 逆元)
- hdu 3037 Lucas定理模板
- Lucas定理模板