题目大意:求

\[G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659
\]

题解:卢卡斯定理+中国剩余定理

利用卢卡斯定理求出指数和式对各个素模数的解,再利用中国剩余定理合并四个解即可。

也可以在枚举 N 的因子的过程中,对于计算的四个解直接进行中国剩余定理的合并,答案不变。

代码如下

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const LL mod = 999911658;
const LL md[] = {2, 3, 4679, 35617};
const int maxn = 40000;
LL fac[maxn]; inline LL fpow(LL a, LL b, LL c) {
LL ret = 1 % c;
for (; b; b >>= 1, a = a * a % c) {
if (b & 1) {
ret = ret * a % c;
}
}
return ret;
}
inline LL comb(LL x, LL y, LL p) {
if (y > x) {
return 0;
}
return fac[x] * fpow(fac[x - y], p - 2, p) % p * fpow(fac[y], p - 2, p) % p;
}
LL Lucas(LL x, LL y, LL p) {
if (y == 0) {
return 1;
}
return Lucas(x / p, y / p, p) * comb(x % p, y % p, p) % p;
}
LL CRT(vector<LL> &v) {
LL ret = 0;
for (int i = 0; i < 4; i++) {
ret = (ret + mod / md[i] * fpow(mod / md[i], md[i] - 2, md[i]) % mod * v[i] % mod) % mod;
}
return ret;
} int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
LL n, G;
cin >> n >> G;
if (G % (mod + 1) == 0) {
cout << 0 << endl;
return 0;
}
vector<LL> v;
for (int i = 0; i < 4; i++) {
LL res = 0;
fac[0] = 1;
for (int j = 1; j < 35617; j++) {
fac[j] = fac[j - 1] * j % md[i];
}
for (int j = 1; j <= sqrt(n); j++) {
if (n % j == 0) {
res = (res + Lucas(n, n / j, md[i])) % md[i];
if (j * j != n) {
res = (res + Lucas(n, j, md[i])) % md[i];
}
}
}
v.push_back(res);
}
LL p = CRT(v);
cout << fpow(G, p, mod + 1) << endl;
return 0;
}
/*
2
3
4679
35617
*/

【洛谷P2480】古代猪文的更多相关文章

  1. 洛谷P2480 古代猪文

    这道题把我坑了好久...... 原因竟是CRT忘了取正数! 题意:求 指数太大了,首先用欧拉定理取模. 由于模数是质数所以不用加上phi(p) 然后发现phi(p)过大,不能lucas,但是它是个sq ...

  2. 洛谷 [P2480] 古代猪文

    卢卡斯定理 注意特判底数和模数相等的情况 http://www.cnblogs.com/poorpool/p/8532809.html #include <iostream> #inclu ...

  3. 洛谷 P2480 [SDOI2010]古代猪文 解题报告

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

  4. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

  5. 【题解】古代猪文 [SDOI2010] [BZOJ1951] [P2480]

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

  6. 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理

    P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...

  7. P2480 [SDOI2010]古代猪文

    P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...

  8. 【BZOJ1951】[SDOI2010]古代猪文

    [BZOJ1951][SDOI2010]古代猪文 题面 bzoj 洛谷 题解 题目实际上是要求 $ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $ 而这个奇怪的模数实际 ...

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

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

  10. luogu_2480: 古代猪文

    洛谷:2480古代猪文 题意描述: 给定两个整数\(N,G\),求$G^{\sum_{k|n}C_n^k} mod 999911659 $. 数据范围: \(1\leq N\leq 10^9,1\le ...

随机推荐

  1. 2019华东交通大学ACM基地简介

    一.基地成就简介: ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest(简称ACM-ICPC或ICPC))是由国际 ...

  2. thinkphp中return $this->fetch的问题

    当reture放在foreach循环外面,也就是现在的位置的时候,会报错.如下图.但当return放在foreach语句里面的时候就不会报错,但因为return会结束语句,这也就导致了foreach只 ...

  3. MyBatis使用小结

  4. django API返回中文乱码

    renturn HttpResponse(json.dumps(data,ensure_ascii=False))

  5. Python 装饰&生成&迭代器

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. Windows编程 Windows程序的生与死(下)

    再谈程序之“死” 记得在第二回中我对程序的“死”只是一句话带过,因为我还没有铺垫好,好了现在我们可以详细的分析一下这个过程了. 这还要从while消息循环说起,还记得GetMessage函数吗?它是一 ...

  7. 安装 node.js npm,cnpm

    参考:https://blog.csdn.net/suiyuehuimou/article/details/74143436 https://www.liaoxuefeng.com/wiki/0014 ...

  8. c#本地文件配置xml

    /// <summary> /// 处理xml文件 /// </summary> public class HandelXmlFile { private string _co ...

  9. [NOIP10.5模拟赛]3.c题解--思维

    题目链接 这次不咕了 https://www.luogu.org/problemnew/show/AT2389 闲扯 考场20分爆搜走人 \cy 话说这几天T3都很考验思维啊 分析 我们先钦定一只鸡( ...

  10. luogu1005矩阵取数游戏题解--区间DP

    题目链接 https://www.luogu.org/problemnew/show/P1005 分析 忽然发现这篇题解好像并没有什么意义...因为跟奶牛零食那道题一模一样,博主比较懒如果您想看题解的 ...