博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019西安联训B层 Day 5 test T2 排列组合
阅读量:4687 次
发布时间:2019-06-09

本文共 1457 字,大约阅读时间需要 4 分钟。

做法:组合数取模

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

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

扩欧求逆元

#include
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
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

你可能感兴趣的文章
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
Java 文件下载
查看>>
图论——读书笔记 (深度优先搜索)
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
BZOJ1930: [Shoi2003]pacman 吃豆豆
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
编译原理实验一
查看>>
Git for Android Studio 学习笔记
查看>>
pip 警告!The default format will switch to columns in the future
查看>>