当前位置: 首页 > news >正文

2019西安联训B层 Day 5 test T2 排列组合

做法:组合数取模

其实我们观察那么长一个式子,其实它有一个结论,在数学竞赛中也常提到,结果就是C(2n,n),相当于从2n个数选n个数出来。因为阶乘的结果太大,所以我们还需要用到逆元。

对于逆元我也会写博客来讲解,求逆元有多种方法,扩欧,费马小定理+快速幂,递推打表,递归(会爆栈)

扩欧求逆元

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int maxn=1e7+7;
int T,n;
long long f[maxn];
long long ans;
void init(){
    f[0]=1;
    for(int i=1;i<=2000010;i++){
        f[i]=f[i-1]*i%mod;
    }
}
long long Exgcd(long long a,long long &x,long long b,long long &y){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    long long GCD=Exgcd(b,x,a%b,y);
    long long tmp=x;
    x=y;
    y=tmp-(a/b)*y;
    return GCD;
}
long long inv(long long a,long long b){
    long long x,y;
    if(Exgcd(a,x,b,y)!=1) return -1;
    else return (x%b+b)%b;
}
int main()
{
    scanf("%d",&T);
    init();
    while(T--){
        scanf("%d",&n);
        printf("%lld\n",f[2*n]*inv(f[n],mod)%mod*inv(f[n],mod)%mod);
    }
    return 0;
}

快速幂求逆元

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int maxn=1e7+7;
long long f[maxn];
void jc(){
    f[0]=1;
    for(int i=1;i<=2000010;i++){
        f[i]=f[i-1]*i%mod;
    }
}
long long ksm(long long a,long long b){
    long long base=1;
    while(b){
        if(b&1) base=base*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return base;
}
int T,n;
int main()
{
    scanf("%d",&T);
    jc();
    while(T--){
        scanf("%d",&n);
        printf("%lld\n",f[2*n]*ksm(f[n],mod-2)%mod*ksm(f[n],mod-2)%mod); 
    }
    return 0;
}

结果

 

转载于:https://www.cnblogs.com/LJB666/p/11005902.html

相关文章:

  • pg_bulkload
  • 洛谷 P1233 【木棍加工】题解
  • 这算是CSS的bug吗?
  • MAC OS X IOS系统调用的处理
  • 8位二进制补码表示整数的最小值是什么,最大值是什么
  • ttlsa教程系列之mongodb——(五)mongodb架构-复制原理复制集
  • Eclipse中java获得mysql的查询结果集
  • 成熟的软件组件都是老板用大把、大把的钱堆出来烧出来的,以最简单的数据库访问组件为例...
  • Cookie 在前端中的实践
  • 事务(Transaction)
  • Android之ubuntu源码开发环境搭建笔记
  • [转]Nodejs基础中间件Connect
  • mybatis 中的where标签
  • 高并发量网站解决方案
  • WinPcap的开发与应用:获取设备列表
  • “大数据应用场景”之隔壁老王(连载四)
  • 2017年终总结、随想
  • Android 架构优化~MVP 架构改造
  • Github访问慢解决办法
  • HTTP请求重发
  • JavaScript-Array类型
  • MySQL-事务管理(基础)
  • Nacos系列:Nacos的Java SDK使用
  • nginx 配置多 域名 + 多 https
  • Odoo domain写法及运用
  • Redis 中的布隆过滤器
  • session共享问题解决方案
  • 创建一种深思熟虑的文化
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前端_面试
  • 通信类
  • ​如何防止网络攻击?
  • # 数据结构
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (¥1011)-(一千零一拾一元整)输出
  • (2020)Java后端开发----(面试题和笔试题)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C++)八皇后问题
  • (独孤九剑)--文件系统
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (一)为什么要选择C++
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)我也是一只IT小小鸟
  • ***检测工具之RKHunter AIDE
  • *1 计算机基础和操作系统基础及几大协议
  • ./configure,make,make install的作用(转)
  • .NET 反射 Reflect
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net反编译的九款神器
  • .NET命令行(CLI)常用命令
  • .NET微信公众号开发-2.0创建自定义菜单
  • .Net下的签名与混淆
  • .Net中的集合