fzu 2020 组合数对素数取模lucas定理
2015-04-14 17:11
459 查看
由于p是素数,计算逆元可以借助费马小定理,用扩展欧几里得也可以,不过预计比快速幂慢吧。
代码如下:
#include <iostream> using namespace std; typedef long long ll; int pow_mod( int a, int n, int mod ) { int ans = 1, w = a % mod; while ( n ) { if ( n & 1 ) { ans = (ll) ans * w % mod; } w = (ll) w * w % mod; n = n >> 1; } return ans; } int c( int n, int m, int p ) { int ans = 1; for ( int i = 1; i <= m; i++ ) { int a = n - m + i, b = i; a = a % p, b = b % p; ans = (ll) ans * ( (ll) a * pow_mod( b, p - 2, p ) % p ) % p; } return ans; } int lucas( int n, int m, int p ) { int ans = 1; while ( n ) { ans = (ll) ans * c( n % p, m % p, p ) % p; n = n / p, m = m / p; } return ans; } int main () { int t; cin >> t; while ( t-- ) { int n, m, p; cin >> n >> m >> p; cout << lucas( n, m, p ) << endl; } return 0; }
参考于:http://m.blog.csdn.net/blog/acdreamers_11109/8037918
相关文章推荐
- FZU 2020 组合数取模(Lucas定理模版)
- fzu 2020 组合数对素数取模
- FZU 2020 组合 -- (大组合数取模 Lucas定理)
- 【FZU2020】【Lucas模板题】【求组合数取模】
- fzu 2020 Lucas 定理,组合数求模模板
- hdu 6114 Chess(组合数取模)(Lucas定理)
- hdu5968(组合数取模Lucas定理)
- lucas 定理,组合数取模
- [hdu5226]组合数求和取模(Lucas定理)
- hdu 3037(Lucas定理,大组合数取模)
- FZU 2020 组合(Lucas定理)
- hdu 6114 Chess(组合数取模)(Lucas定理)
- FZU 2020 组合(Lucas定理的应用)
- hdu 6114 Chess(组合数取模)(Lucas定理)
- 大组合数取模——fzu 2020(可做模板)
- 组合数取模 Lucas定理
- hdu-3037-Saving Beans(Lucas定理+大组合数取模)
- hdu 6114 Chess(组合数取模)(Lucas定理)
- hdu 3037 Saving Beans 【大组合数取模-Lucas定理+逆元取模】
- Lucas定理与大组合数的取模的求法总结