bzoj 1951(Lucas定理+中国剩余定理)
来源:互联网 发布:有没有唱歌软件 编辑:程序博客网 时间:2024/06/07 19:08
传送门
新技能get:为没有mod的组合数创造mod,然后使用Lucas定理
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll MOD=999911659;ll p[4]={2,3,4679,35617};ll fac[4][36000],g;ll d[36000],a[36000];int tot=0;int n;inline void init(int j) { fac[j][0]=fac[j][1]=1; for (int i=2;i<p[j];++i) fac[j][i]=fac[j][i-1]*i%p[j];}ll fpow(ll a,ll b,ll p) { ll ret=1; while (b) { if (b&1) ret=ret*a%p; b>>=1,a=a*a%p; } return ret;}ll lucas(int i,ll n,ll m) { ll ret=1; while (n&&m) { ll nn=n%p[i],mm=m%p[i]; if (nn<mm) return 0; ret=ret*fac[i][nn]%p[i]*fpow(fac[i][nn-mm]*fac[i][mm]%p[i],p[i]-2,p[i])%p[i]; n/=p[i],m/=p[i]; } return ret;}ll exgcd(ll a,ll b,ll &x,ll &y) { if (!b) { x=1,y=0; return a; } ll d=exgcd(b,a%b,y,x); y-=(a/b)*x; return d;}ll CRT(int n,ll a[],ll p[]) { ll M=1; for (int i=0;i<n;++i) M*=p[i]; ll ret=0; for (int i=0;i<n;++i) { ll w=M/p[i],x,y; ll d=exgcd(w,p[i],x,y); ret=(ret+x*w%M*a[i]%M)%M; } return (ret+M)%M;}int main() { scanf("%d%lld",&n,&g); if (g==MOD) {puts("0");return 0;} for (int i=1;i*i<=n;++i) if (n%i==0) { if (i*i==n) d[++tot]=i; else d[++tot]=i,d[++tot]=n/i; } for (int j=0;j<4;++j) init(j); for (int j=1;j<=tot;++j) { for (int i=0;i<4;++i) a[i]+=lucas(i,n,d[j]),a[i]%=p[i]; } ll ans=CRT(4,a,p); printf("%lld\n",fpow(g,ans,MOD)); return 0;}
阅读全文
0 0
- BZOJ 1951 lucas定理 中国剩余定理
- bzoj 1951(Lucas定理+中国剩余定理)
- BZOJ 1951 古代猪文 (Lucas 中国剩余定理)
- BZOJ 1951: [Sdoi2010]古代猪文(Lucas定理 &&中国剩余定理&&费马小定理)
- bzoj 1951: [Sdoi2010]古代猪文 (Lucas定理+中国剩余定理)
- BZOJ-1951-古代猪文-SDOI2010-费马小定理+欧拉函数+lucas定理+中国剩余定理
- [BZOJ 1951] 古代猪文【Lucas定理/费马小定理/中国剩余定理/扩展欧几里得】
- bzoj 1951: [Sdoi2010]古代猪文 费马小定理+中国剩余定理+lucas定理+快速幂
- BZOJ 1951 费马小定理 + Lucas定理 + 乘法逆元 + 中国剩余定理 + 快速幂
- [BZOJ 1951][Sdoi2010]古代猪文:Lucas定理|中国剩余定理|费马小定理|扩展欧几里得
- BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
- hdu-5446(中国剩余定理+lucas)
- hdu5446 lucas+中国剩余定理
- HDU 5446 Unknown Treasure(Lucas定理+中国剩余定理)
- hdu 5446 Unknown Treasure(Lucas定理+中国剩余定理)
- HDU 4373 Mysterious For(Lucas 定理 + 中国剩余定理)
- HDU 4373 Mysterious For(Lucas定理、中国剩余定理)
- HDU 5446 Unknown Treasure(Lucas定理+中国剩余定理)
- Hadoop/Spark推荐系统(一)——共同好友
- Asp.Net重定向过程
- 【论文学习】3D Convolutional Neural Networks for Human Action Recognition
- 欢迎使用CSDN-markdown编辑器
- Leetcode之Pascal's Triangle 问题
- bzoj 1951(Lucas定理+中国剩余定理)
- [复习]线段树 系列操作I
- 民谣不穷!
- 广播监听网络
- Android Frameworks系列(二) 彻底弄懂startActivity
- 第一篇博客
- codevs 1222 信与信封问题 二分图 匈牙利 解题报告
- 装饰器之装饰器类
- Gookie与Session会话跟踪机制