【BZOJ1951】[SDOI2010]古代猪文

题面

bzoj

洛谷

题解

题目实际上是要求

$ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $

而这个奇怪的模数实际上是个素数,由欧拉定理

$ G^{\sum d|n\;C_n^d}\;mod \; 999911659=G^{\sum d|n\;C_n^d\;mod\;99911658}\;mod \; 999911659 $

主要是解决

$ \sum d|n\;C_n^d\;mod\;999911658 $

注意到

$ 999911658=2×3×4679×35617 $

所以可以对每个质因数枚举约束,用$Lucas$求组合数

最后$CRT$合并即可,注意要特判

代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. typedef long long ll;
  9. const ll Mod = 999911658;
  10. ll N, G, fac[50005], ans[10], b[10] = {0, 2, 3, 4679, 35617};
  11. ll fpow(ll x, ll y, ll p) {
  12. ll res = 1;
  13. while (y) {
  14. if (y & 1ll) res = res * x % p;
  15. x = x * x % p;
  16. y >>= 1ll;
  17. }
  18. return res;
  19. }
  20. void init (ll p) { fac[0] = 1; for (ll i = 1; i <= p; i++) fac[i] = i * fac[i - 1] % p; }
  21. ll C(ll n, ll m, ll p) {
  22. if (n < m) return 0;
  23. return fac[n] * fpow(fac[m], p - 2, p) % p * fpow(fac[n - m], p - 2, p) % p;
  24. }
  25. ll Lucas(ll n, ll m, ll p) {
  26. if (!m || !n) return 1;
  27. return Lucas(n / p, m / p, p) * C(n % p, m % p, p) % p;
  28. }
  29. ll CRT() {
  30. ll res = 0;
  31. for (int i = 1; i <= 4; i++)
  32. res = (res +
  33. ans[i] * (Mod / b[i]) % Mod *
  34. fpow(Mod / b[i], b[i] - 2, b[i])
  35. % Mod) % Mod;
  36. return res;
  37. }
  38. int main () {
  39. cin >> N >> G;
  40. if (G % (Mod + 1) == 0) return puts("0") & 0;
  41. for (int p = 1; p <= 4; p++) {
  42. init(b[p]);
  43. for (int i = 1; i * i <= N; i++) {
  44. if (N % i == 0) {
  45. ans[p] = (ans[p] + Lucas(N, i, b[p])) % b[p];
  46. if (i * i != N) ans[p] = (ans[p] + Lucas(N, N / i, b[p])) % b[p];
  47. }
  48. }
  49. }
  50. printf("%lld\n", fpow(G, CRT(), Mod + 1));
  51. return 0;
  52. }

【BZOJ1951】[SDOI2010]古代猪文的更多相关文章

  1. [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

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

  2. BZOJ1951[SDOI2010]古代猪文

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

  3. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

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

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

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

  5. BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...

  6. bzoj千题计划323:bzoj1951: [Sdoi2010]古代猪文(Lucas+CRT+欧拉定理)

    https://www.lydsy.com/JudgeOnline/problem.php?id=1951 先欧拉降幂 然后模数质因数分解 分别计算组合数的结果,中国剩余定理合并 #include&l ...

  7. bzoj1951 [Sdoi2010]古代猪文 ——数论综合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 题意就是要求 G^( ∑(k|n) C(n,k) ) % p,用费马小定理处理指数,卢 ...

  8. 【BZOJ1951】[Sdoi2010]古代猪文 Lucas定理+CRT

    [BZOJ1951][Sdoi2010]古代猪文 Description 求$X=\sum\limits_{d|n}C_n^d$,$Ans=G^X (\mod 999911659)$. Input 有 ...

  9. 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理

    [bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...

随机推荐

  1. UIView 中 hidden、alpha、clear color 与 opaque 的区别

    透明度与图层混合相关,影响到图片绘制的效率. hidden 此属性为 BOOL 值,用来表示 UIView 是否隐藏.关于隐藏大家都知道就是让 UIView 不显示而已,但是需要注意的是: 当前 UI ...

  2. Python 模块化 import 语句介绍(一)

    用法: import 模块1[,模块2,模块3...] os 顶级模块os.path 非顶级模块as 相当于重命名 import 的本质: 解释器负责模块单独加载,单独初始化,生成一个模块对象,当前作 ...

  3. fread与fread_s读取文件(二进制文件)

    fread()是c库函数,利于移植,使用缓存,效率较read()高. 原型: size_t fread(void *buffer, size_t size, size_t count, FILE * ...

  4. java 常用类2

    1.1 日期时间类 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms). 计算机中时间2019-04- ...

  5. springboot项目用gradle打jar包

    C:\1_work_files\workspace_sts\HR\psn\build\libs

  6. JDK(七)JDK1.8源码分析【集合】TreeMap

    本文转载自joemsu,原文链接 [JDK1.8]JDK1.8集合源码阅读——TreeMap(二) TreeMap是JDK中一种排序的数据结构.在这一篇里,我们将分析TreeMap的数据结构,深入理解 ...

  7. HDU 1102(Constructing Roads)(最小生成树之prim算法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1102 Constructing Roads Time Limit: 2000/1000 MS (Ja ...

  8. linux文件系统写过程简析

    linux写入磁盘过程经历VFS ->  页缓存(page cache) -> 具体的文件系统(ext2/3/4.XFS.ReiserFS等) -> Block IO ->设备 ...

  9. 在Red Hat Enterprise Linux 7.3上安装SQL Server 2017

    必要条件: 1.在此快速安装过程中,您需要安装SQL Server 2017或SQL Server 2019上Red Hat Enterprise Linux (RHEL) 7.3 +.然后使用sql ...

  10. ztree案例笔记:用户不规范操作导致添加不了节点的问题

    我使用ztree开发了简码"万能助手",经过一段时间的观察,发现有个别用户不看教程就开始操作,总能给我折腾出一些让人哭笑不得的问题. 比如,把某个根栏目里的节点全删除,然后发现添加 ...