传送门

文章目录

  • 题目描述
  • 解析
  • 总结
  • 代码

题目描述

解析

简单来说,就是求:

g∑C(d,n)(d是n的约数)mod 999911659

可以先特判一下,999911659|g时,答案为0
否则,可以通过欧拉定理转化为:

g∑C(d,n)(d是n的约数)mod999911658 mod 999911659

取完模之后,指数已经限制在了一个较小的范围,如果求出其值,就可以用快速幂解决
现在考虑求这个指数:

∑C(d,n)(d是n的约数)mod999911658

面对这样较大的组合数取模,容易想到用卢卡斯定理解决
但是问题在于本题的模数太大
所以我们考虑对这个模数进行质因数分解:

999911658=234679*35617

如果对这四个模数分别取模,就能把模数限制在一个可以接受的大小,并建立出4个同余方程
然后再利用中国剩余定理,解出这个指数即可

总结

本题的关键在于遇见大模数后进行质因数分解在进行中国剩余定理的转化

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
#define int long long
const int N=3e5+100;
const ll mod=999911658;
const ll Mod=999911659;
ll ksm(ll x,ll o){ll ans=1,res=x%Mod;while(o){if(o&1) ans=(ans*res)%Mod;res=(res*res)%Mod;o>>=1;}return ans%Mod;
}
ll n;
ll g;
ll m[5]={0,2,3,4679,35617},M[5],MM,t[5];
ll d[N],num;
void divide(ll x){int top=floor(sqrt(x));d[++num]=1;for(int i=2;i<=top;i++){if(x%i==0){d[++num]=i;if(n/i!=i) d[++num]=n/i;}}d[++num]=x;return;
}
ll ni[5][N],jc[N];
ll a[5];ll C(int k,ll d,ll n){if(d>n) return 0;if(d==n) return 1;return (jc[n]*ni[k][d]*ni[k][n-d])%m[k];
}
ll lucas(int k,ll d,ll n){if(d==n) return 1;if(d>n) return 0;return (C(k,d%m[k],n%m[k])%m[k])*lucas(k,d/m[k],n/m[k])%m[k];
}
void gcd(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return;}gcd(b,a%b,x,y);int o=y;y=x-a/b*y;x=o;y%=mod;x%=mod;
}
signed main(){scanf("%lld%lld",&n,&g);if(g%Mod==0) {printf("0");return 0;}divide(n);jc[0]=jc[1]=1;for(int i=1;i<=4;i++) ni[i][0]=ni[i][1]=1;for(int i=2;i<=35167;i++){jc[i]=(jc[i-1]*i)%mod;for(int j=1;j<=4;j++) ni[j][i]=((m[j]-m[j]/i)*ni[j][m[j]%i])%m[j];}for(int i=2;i<=35167;i++) for(int j=1;j<=4;j++)ni[j][i]=(ni[j][i]*ni[j][i-1])%m[j];for(int i=1;i<=num;i++){for(int j=1;j<=4;j++){a[j]=(a[j]+lucas(j,d[i],n))%m[j];//printf("d=%lld mod=%lld ans=%lld\n",d[i],m[j],lucas(j,d[i],n)%m[j]);}}MM=mod;ll ans=0;for(int i=1;i<=4;i++){M[i]=MM/m[i];ll o;gcd(M[i],m[i],t[i],o);ans+=(t[i]*M[i]*a[i])%mod;ans%=mod;}
//  for(int j=1;j<=4;j++){//      printf("k=%d mod=%d:\n",j,m[j]){//          for(int i=1;i<=num;i++){//              printf
//          }
//      }
//  }ans%=MM;while(ans<0) ans+=MM;printf("%lld\n",ksm(g,ans)%Mod);return 0;
}
/*
4
5 1
5 2
7 3
4 2
*/

洛谷P2480:古代猪文(中国剩余定理)(欧拉定理)相关推荐

  1. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)...

    数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...

  2. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2194  Solved: 919 [Submit][Statu ...

  3. P2480 [SDOI2010]古代猪文

    P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...

  4. P2480 [SDOI2010]古代猪文(数论好题)

    P2480 [SDOI2010]古代猪文 题意: 给你n和g,求g∑d∣nCndmodpg^{\sum_{d|n}C_{n}^{d}}\bmod pg∑d∣n​Cnd​modp p=999911659 ...

  5. 1951: [Sdoi2010]古代猪文

    http://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意:求G^(C(N,N/K))%mod ( K|N) 1951: [Sdoi2010]古代猪 ...

  6. 【BZOJ1951】古代猪文(CRT,卢卡斯定理)

    [BZOJ1951]古代猪文(CRT,卢卡斯定理) 题面 BZOJ 洛谷 题解 要求什么很显然吧... \[Ans=G^{\sum_{k|N}{C_N^k}}\] 给定的模数是一个质数,要求解的东西相 ...

  7. 洛谷P1148 拱猪计分

    洛谷P1148 拱猪计分 题意: 拱猪是一种很有趣的扑克牌游戏. 即使你不知道它的玩法,你也可以由它的计分方式来了解它的趣味性. 假设在此我们仅考虑四个人的拱猪牌局,本题要求你根据下面的计分规则,在牌 ...

  8. 【SDOI2010】古代猪文

    [SDOI2010]古代猪文 Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--&quo ...

  9. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】...

    题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...

最新文章

  1. Windows 服务全攻略(2)
  2. win7安装laravel
  3. 手动创建servlet
  4. C++析构器详解【C++析构器】
  5. 信息安全三要素(CIA)
  6. MyBatis 实际使用案例-typeAliases
  7. sql server死锁_了解SQL Server中的死锁定义
  8. 震惊!!!CSS垂直居中竟然有这么多方法~
  9. Web的未来:语义网
  10. 卸载centos7自带java,安装oracle的jdk8
  11. 创建型模式 - 单例模式Singleton
  12. PyTorch模型定义和训练技巧
  13. 计算机内存和显卡,电脑显卡和内存怎么看
  14. 计算机无法分盘,电脑如何分盘
  15. 如何监听安卓机返回键和苹果机微信的返回键事件
  16. CST结果导入MATLAB,请教大家可以将CST结果调入到MATLAB中进行计算吗
  17. Python3.x 标准模块库目录(下篇)
  18. VARIANT 数据类型简单介绍
  19. openCV人脸识别简单案例
  20. 修改vimdiff的颜色配置

热门文章

  1. 像小猪佩奇那样生活,需要多少钱?
  2. 大数据分析苏轼,你没看错,这些都是小学生完成的
  3. nashorn js 调用 java_从nashorn(JDK 8 JavaScript引擎)调用char []输入参数调用Java函数?...
  4. postgresql 分词_使用PostgreSQL进行中文全文检索
  5. linux7为nginx添加服务,CentOS7添加Nginx为系统服务
  6. vgh电压高了有什么_智能变频电源的功能是什么?
  7. 计算机职称 计算机二级证,国家计算机二级证书含金量有多高
  8. cefsharp49显示html,CefSharp-cefshar
  9. android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)
  10. mysql控制台教程视频教程_mysql 控制台操作