zoukankan      html  css  js  c++  java
  • lucas定理

    记一下结论:

    当p为质数时,C(n, a) = C(n % p, a % p) * C(n / p, a / p) (mod p)

     1 #include <cstdio>
     2 
     3 typedef long long LL;
     4 const int N = 100010;
     5 
     6 LL inv[N], nn[N], invn[N];
     7 
     8 inline void getinv(int p) {
     9     inv[1] = 1;
    10     for(int i = 2; i < p; i++) {
    11         inv[i] = (p - (p / i)) * inv[p % i] % p;
    12     }
    13     return;
    14 }
    15 
    16 LL C(LL a, LL b, LL c) {
    17     return nn[a] * invn[b] % c * invn[a - b] % c;
    18 }
    19 LL lucas(LL a, LL b, LL c) {
    20     if(!b) {
    21         return 1;
    22     }
    23     return C(a % c, b % c, c) * lucas(a / c, b / c, c) % c;
    24 }
    25 
    26 inline void solve() {
    27     LL n, m, p;
    28     scanf("%lld%lld%lld", &n, &m, &p);
    29 
    30     getinv(p);
    31     for(int i = 1; i <= p; i++) {
    32         invn[i] = invn[i - 1] * inv[i] % p;
    33         nn[i] = nn[i - 1] * i % p;
    34     }
    35 
    36     LL ans = lucas(m + n, n, p);
    37     printf("%lld
    ", ans);
    38     return;
    39 }
    40 
    41 int main() {
    42     nn[0] = invn[0] = 1;
    43     int T;
    44     scanf("%d", &T);
    45     while(T--) {
    46         solve();
    47     }
    48 
    49     return 0;
    50 }
    AC代码

    复杂度O(p + logn)


    exlucas就是把模数拆了,然后CRT合并。

    以后来填。

  • 相关阅读:
    背景透明,文字不透明
    判断数组类型
    前端工作流程自动化——Grunt/Gulp 自动化
    tools安装
    总结
    CSS Hack
    getBoundingClientRect()兼容性处理
    Math.random获得随机数
    spring RestTemplate 工程导入
    系统架构演变
  • 原文地址:https://www.cnblogs.com/huyufeifei/p/10040262.html
Copyright © 2011-2022 走看看