【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$合并即可,注意要特判

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll Mod = 999911658;
ll N, G, fac[50005], ans[10], b[10] = {0, 2, 3, 4679, 35617};
ll fpow(ll x, ll y, ll p) {
ll res = 1;
while (y) {
if (y & 1ll) res = res * x % p;
x = x * x % p;
y >>= 1ll;
}
return res;
}
void init (ll p) { fac[0] = 1; for (ll i = 1; i <= p; i++) fac[i] = i * fac[i - 1] % p; }
ll C(ll n, ll m, ll p) {
if (n < m) return 0;
return fac[n] * fpow(fac[m], p - 2, p) % p * fpow(fac[n - m], p - 2, p) % p;
}
ll Lucas(ll n, ll m, ll p) {
if (!m || !n) return 1;
return Lucas(n / p, m / p, p) * C(n % p, m % p, p) % p;
}
ll CRT() {
ll res = 0;
for (int i = 1; i <= 4; i++)
res = (res +
ans[i] * (Mod / b[i]) % Mod *
fpow(Mod / b[i], b[i] - 2, b[i])
% Mod) % Mod;
return res;
}
int main () {
cin >> N >> G;
if (G % (Mod + 1) == 0) return puts("0") & 0;
for (int p = 1; p <= 4; p++) {
init(b[p]);
for (int i = 1; i * i <= N; i++) {
if (N % i == 0) {
ans[p] = (ans[p] + Lucas(N, i, b[p])) % b[p];
if (i * i != N) ans[p] = (ans[p] + Lucas(N, N / i, b[p])) % b[p];
}
}
}
printf("%lld\n", fpow(G, CRT(), Mod + 1));
return 0;
}

最新文章

  1. setTimeout用于取消多次执行mouseover或者mouseenter事件,间接实现hover的悬停加载的效果.
  2. git 笔记
  3. IntelliJ IDEA 的SVN配置与使用
  4. 分组排序SQL
  5. shader 的 nounroll
  6. 判断String为空
  7. Net基础恶补
  8. Linux网络服务12——NFS共享服务
  9. zookeeper+dubbo简单使用
  10. Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
  11. 浅谈移动端适配-rem
  12. 基于WebGL架构的3D可视化平台—新风系统演示
  13. python try except else finally
  14. Alpha 冲刺 (8/10)
  15. 微信小程序-1
  16. leetcode 相交链表 python实现
  17. iOS开发-音乐播放
  18. Fast-RCNN
  19. 聪明的打字员---poj1184(bfs)
  20. 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)

热门文章

  1. idea更新maven依赖包
  2. Git版本控制 备忘录
  3. [Python WEB开发] 使用WSGI开发类Flask框架 (二)
  4. [转]MVP+WCF+三层结构搭建项目框架
  5. SQLIO 磁盘測试工具參考
  6. mysql将日期字符串转换
  7. 生成二维码的 jQuery 插件:jquery.qrcode.js的中文乱码问题
  8. SpringBoot读取自定义配置文件
  9. C++程序设计入门(上) 函数学习
  10. #leetcode刷题之路22-括号生成