算法基础之组合数 II

算法基础之组合数 II

  • 核心思想:快速幂求逆元

    • 前置:Cba = a! /(b! * (a-b)!)
      • 即 faca * infacb * infaca-b;
cpp 复制代码
  #include <iostream>
  #include <cstring>
  #include <algorithm>
  
  using namespace std;
  const int MOD = 1e9+7,N = 1e5+10;
  typedef long long LL;
  
  long long fac[N],infac[N];
  int n;
  
  int qmi(int a,int b,int k)  //快速幂求逆元
  {
      int res = 1;
      while(b)
      {
          if(b&1) res = (LL)res*a%k;
          b>>=1;
          a = (LL)a*a%k;
      }
      return res;
  }
  int main()
  {
      fac[0] = infac[0] = 1;
      for(int i=1;i<=100000;i++)  //预处理
      {
          fac[i] = fac[i-1] * i % MOD;
          infac[i] = (LL)infac[i-1] * qmi(i,MOD-2,MOD)%MOD;
      }
      cin>>n;
      while(n--)
      {
          int a,b;
          cin>>a>>b;
          //多%几次 会爆
          cout<<(LL)fac[a] * infac[b]%MOD * infac[a-b] %MOD<<endl;
      }
  }
相关推荐
lzhdim2 小时前
AI的分类
人工智能·算法·机器学习·分类·数据挖掘
凤凰院凶涛QAQ5 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
w_zero_one7 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David7 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
·present·7 小时前
CSAPP(lecture 4_01)
c语言·c++
FPGA小迷弟8 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
秋天的怀念_David8 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪8 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
程序员-King.8 小时前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
云深麋鹿8 小时前
C++ | 基于红黑树实现mymap与myset
开发语言·c++