算法基础之组合数 II

算法基础之组合数 II

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

    • 前置:Cba = a! /(b! * (a-b)!)
      • fac[a] * infac[b] * infac[a-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;
      }
  }
相关推荐
彩妙不是菜喵几秒前
STL精讲:string类
开发语言·c++
一起养小猫2 分钟前
LeetCode100天Day16-跳跃游戏II与H指数
算法·游戏
小屁猪qAq3 分钟前
创建型之单例模式
开发语言·c++·单例模式
mit6.8245 分钟前
两个有序集合|状态分析
算法
王老师青少年编程11 分钟前
GESP(C++)考级(七级&八级)真题及详细题解(汇总版)
c++·题解·真题·gesp·csp·七级·八级
平生不喜凡桃李18 分钟前
LeetCode 两数之和/三数之和
算法·leetcode·两数之和·三数之和
C雨后彩虹18 分钟前
中文分词模拟器
java·数据结构·算法·华为·面试
BLi4ee20 分钟前
【Scholarly Notes】Adaptive Model Pruning for Federated Learning
算法·机器学习·剪枝
Remember_99326 分钟前
【LeetCode精选算法】二分查找专题二
java·数据结构·算法·leetcode·哈希算法
凯子坚持 c26 分钟前
C++大模型SDK开发实录(三):流式交互协议SSE解析与httplib实现原理
开发语言·c++·交互