博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大组合取模之:1<=n<=m<=1e6,1<=p<=1e9
阅读量:7167 次
发布时间:2019-06-29

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

/****************************** 大组合取模之:1<=n<=m<=1e6,1<=p<=1e9 使用:程序最开始调用getprime(),需要时调用C(n,m,p) 复杂度:O( n*log(n) ) ******************************/typedef long long ll;#define N 210000int PRIME[N/2];void getprime(){    bool pmark[N+1000];    memset(pmark,0,sizeof(pmark));    int pcnt=0;    PRIME[pcnt++]=2;    for(int i=3;i
10^9,log(mod)*log(b),否则log(b) ***************/long long Mod_Mul(long long a,long long b,long long mod){ long long msum=0; while(b) { if(b&1) msum = (msum+a)%mod; b>>=1; a = (a+a)%mod; } return msum;}long long Quk_Mul(long long a,long long b,long long mod){ bool qmflag=mod>1e9?1:0; long long qsum=1; while(b) { if(b&1) qsum = (qmflag==1) ? Mod_Mul(qsum,a,mod) : (qsum*a)%mod; b>>=1; a = (qmflag==1) ? Mod_Mul(a,a,mod) : (a*a)%mod; } return qsum;}// 得到n! 中有多少个d因子int getdn(int n,int d){ int sum=0; while(n) { sum += n/d; n/=d; } return sum;}ll C(int n,int m,ll p){ if(m>n) return 0; ll sumc=1; for(int i=0;PRIME[i]<=n;i++) { int cnum = getdn(n,PRIME[i])-getdn(m,PRIME[i])-getdn(n-m,PRIME[i]); sumc = sumc*Quk_Mul(PRIME[i], cnum, p)%p; } return sumc;}/*int main() { getprime(); int T; cin>>T; while(T--) { int n,m,p; cin>>n>>m>>p; cout<
<

 

转载地址:http://cvmwm.baihongyu.com/

你可能感兴趣的文章
Install EPEL Repo on a CentOS and RHEL 7.x
查看>>
js中2个等号与3个等号的区别
查看>>
SharedUserId 与 Android自定义Permission
查看>>
UICollectionView cell 的布局
查看>>
sqlite3 数据操作 修改
查看>>
TODO:Golang Linux进程退出说明
查看>>
cat >file << EOF
查看>>
使用Maven构建模块化工程
查看>>
SequoiaDB巨杉数据库携手民生银行分布式数据管理平台
查看>>
windows下使用crt远程连接virtualbox里面的linux
查看>>
banner滑动juqery特效 带自动切换
查看>>
Intellij IDEA GIT 分支合并冲突
查看>>
Android中Paint字体的使用
查看>>
vsftpd开启日志记录上传、下载、删除,分析xferlog日志
查看>>
Ruby On Rails 路由配置简述
查看>>
TurboMail邮件系统工程师重要提醒:谨防邮件钓鲸诈骗
查看>>
keytool生成证书与Tomcat SSL配置
查看>>
Maven创建web项目:SpringMVC+Mybatis
查看>>
最佳的75个安全工具
查看>>
我的友情链接
查看>>