博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板 lucas
阅读量:7218 次
发布时间:2019-06-29

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

void extend_gcd(ll a,ll &x,ll b,ll &y){    if(b==0){        x=1,y=0;        return;    }    ll x1,y1;    extend_gcd(b,x1,a%b,y1);    x=y1;    y=x1-(a/b)*y1;}ll inv(ll a,ll m){    ll t1,t2;    extend_gcd(a,t1,m,t2);    return ( t1%m + m ) % m;}ll qpow(ll x,ll y,ll m){    if(!y) return 1;    ll ans=qpow(x,y>>1,m);    ans= ans *ans %m;    if(y&1) ans=ans *x %m;    return ans;}ll nump(ll x,ll p){    ll ans=0;    while(x) ans += x/p, x /= p;    return ans;}ll fac(ll n,ll p,ll pk){    if(n==0) return 1;    ll ans=1;    for(ll i=1;i<=pk;i++){        if(i%p==0) continue;        ans= ans *i %pk;    }    ans = qpow(ans,n/pk,pk);    ll to=n%pk;    for(ll i=1;i<=to;i++){        if(i%p==0) continue;        ans = ans *i %pk;    }    return fac(n/p,p,pk) *ans %pk;}ll cal(ll n,ll m,ll p,ll pi,ll pk){    ll a=fac(n,pi,pk),b=fac(m,pi,pk),c=fac(n-m,pi,pk);    ll d=nump(n,pi)-nump(m,pi)-nump(n-m,pi);    ll ans= a %pk * inv(b,pk) %pk * inv(c,pk) %pk * qpow(pi,d,pk) %pk;    return ans * (p/pk) %p * inv(p/pk,pk) %p;}ll nCmmodp(ll n,ll m,ll p){    if(n
1;i++){ ll k=0,pk=1; while(x%i==0){ x /= i; k++; pk *= i; } if(k>0){ ans =( ans + cal(n,m,p,i,pk) )%p; } } if(x>1) ans=( ans + cal(n,m,p,x,x) )%p; return ans;}

 

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

你可能感兴趣的文章
VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法
查看>>
【ora-err】ORA-03113: end-of-file on communication channel
查看>>
00.索引-综述
查看>>
strcpy
查看>>
AC3 Rematrix
查看>>
C#之Windows Form Application与attribute
查看>>
函数与指针分析实例
查看>>
爬虫:pycurl模块的使用说明
查看>>
Halcon算子翻译——try
查看>>
Win732位安装PostgreSQL9
查看>>
Ext JS4学习笔记1——环境的搭建
查看>>
.net MVC3实现不同的角色用不同的登录页面
查看>>
Scala学习笔记-12
查看>>
eq与gt的妙用
查看>>
哈哈哈
查看>>
projectEuler pro10
查看>>
聚焦“云开发圆桌论坛”,大前端Serverless大佬们释放了这些讯号!
查看>>
数学模板
查看>>
c#中英文混合字符串截取指定长度
查看>>
.NetCore应用多个target framework
查看>>