ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

模板-数论

2022-09-03 11:31:22  阅读:168  来源: 互联网

标签:return Combination 数论 ret int mul div 模板


原来源: dian巨

阶乘逆元求组合数

在做D - Madoka and The Corruption Scheme时, 一个满二叉树的走法就是C(n,i), 在n轮中赢几场, 最终就是杨辉三角前缀和

image

template<typename T = long long, int P = 1000000007>
class Combination{
 public:// 初始化组合数, mul[i]=i!, div[i]=1/(i!)
  Combination(int n): div(n + 1, 1), mul(n + 1, 1){
      for(int i = 1; i <= n; ++i) mul[i] = mul[i - 1] * i % P;
      div[n] = qPow(mul[n], P - 2);
      for(int i = n - 1; i > 0; --i) div[i] = div[i + 1] * (i + 1) % P;
  }
  T operator () (int n, int m){// c(2,1)=2
      if(m < 0) return 0;
      if(m > n) return 0;
      return mul[n] * div[m] % P * div[n - m] % P;
  }

 private:
  T qPow(T b, T n){
      T ret = 1;
      while(n){
          if(n & 1) ret = ret * b % P;
          b = b * b % P;
          n >>= 1;
      }
      return ret;
  }
  vector<T> div, mul;
};

标签:return,Combination,数论,ret,int,mul,div,模板
来源: https://www.cnblogs.com/LiamEvander/p/16652223.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有