题目链接

这题出的有点nb,PKU: Pig Kingdom University , NOIP: National Olympics in Informatic of Pigs。。。

题意:求\(G^{\sum_{d|n}C_n^d}mod\ 999911659\)

根据费马小定理的推论,题目可以转化为求\(G^{\sum_{d|n}C_n^dmod999911658}mod\ 999911659\)

对\(999911658\)分解质因数可得\(999911658=2\times3\times4679\times35617\)

枚举这4个数,再枚举\(n\)的因子\(d\),预处理阶乘和逆元,用Lucas定理求出\(\sum_{d|n}C_n^d\),最后用中国剩余定理合并就行了。

#include <cstdio>
#include <cstdlib>
#include <cmath>
typedef long long ll;
const int MAXN = 40000; // The Biggest Prime
const int MOD = 999911659;
const int MO = 999911658;
const int prime[6] = {233, 2, 3, 4679, 35617};
const int M = 4;
int n, q;
int fact[MAXN], inv[MAXN], a[M + 2], t[M + 2];
int C(int n, int m, int mod){
if(n < m) return 0;
return fact[n] * inv[fact[m]] % mod * inv[fact[n - m]] % mod;
}
int Lucas(int n, int m, int mod){
if(!m) return 1;
return C(n % mod, m % mod, mod) * Lucas(n / mod, m / mod, mod) % mod;
}
int Pow(int q, int k, int mod){
int ans = 1;
while(k){
if(k & 1) ans = ((long long)ans * q) % mod;
k >>= 1;
q = (long long)q * q % mod;
}
return ans;
}
int Crt(int a[]){
int ans = 0;
for(int i = 1; i <= M; ++i){
int tmp = MOD / prime[i];
ans = ((long long)ans + (long long)a[i] * tmp % MO * Pow(tmp, prime[i] - 2, prime[i])) % MO;
}
return ans;
}
int main(){
scanf("%d%d", &n, &q);
if(q % MOD == 0){
printf("0\n");
return 0;
}
inv[1] = 1;
fact[1] = 1;
fact[0] = 1;
for(int i = 1; i <= M; ++i){
for(int j = 2; j <= prime[i]; ++j)
fact[j] = (fact[j - 1] * j) % prime[i], inv[j] = (prime[i] - prime[i] / j) * inv[prime[i] % j] % prime[i];
for(int d = 1; d * d <= n; ++d){
if(n % d) continue;
a[i] = (a[i] + Lucas(n, d, prime[i])) % prime[i];
if(d * d == n) continue;
a[i] = (a[i] + Lucas(n, n / d, prime[i])) % prime[i];
}
}
printf("%d\n", Pow(q, Crt(a), MOD));
return 0;
}

【洛谷 P2480】 [SDOI2010]古代猪文(中国剩余定理,Lucas定理)的更多相关文章

  1. 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)

    洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...

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

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

  3. 洛谷 P2480 [SDOI2010]古代猪文 题解【欧拉定理】【CRT】【Lucas定理】

    数论综合题. 题目背景 题目背景与题目无关因此省略.题目链接 题目描述 猪王国的文明源远流长,博大精深. iPig 在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为 \(N\).当然,一种语 ...

  4. 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

    传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...

  5. 洛谷P2480 [SDOI2010]古代猪文

    要求(图是盗来的QAQ) 首先用欧拉定理把幂模一下,直接就是MOD-1了 然后发现MOD-1可以分解为2,3,4679,35617,都是质数,可以直接用Lucas定理 然后用中国剩余定理合并一下即可 ...

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

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

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

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

  8. 【洛谷P2480】古代猪文

    题目大意:求 \[ G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659 \] 题解:卢卡斯定理+中国剩余定理 利用卢卡斯定理求出指数和式对各个素模数的 ...

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

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

  10. P2480 [SDOI2010]古代猪文

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

随机推荐

  1. Vue学习(五):列表渲染

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Linux-Shell脚本编程-学习-7-总结前面开启后面的学习

    国庆前期后国庆回来也都比较忙,把书一放下,在那起来,就难了,发现好多都开始忘记了,今天好不容易硬着头片看来两章,算是马马虎虎的把前面的基础性质的只是看完了吧. 后面讲开始学习Shell编程的高级阶段, ...

  3. ipfs补充命令

    ipfs cat之后 将文件保存在指定的路径下 添加都文件夹下面 ipfs files cp /ipfs/QmSkyNME8YqndkNq7ovKphpYwjk2hEQ61P1pjSckqLP6zt ...

  4. Luogu2570 ZJOI2010 贪吃的老鼠 二分答案+最大流

    题目链接:https://www.luogu.org/problemnew/show/P2570 题意概述: 好像没什么好概述的.....很简洁? 分析: 首先想到二分时间,转化成判定性问题,在一定时 ...

  5. POJ 3858 Hurry Plotter(DP)

    Description A plotter is a vector graphics printing device that connects to a computer to print grap ...

  6. android-ViewList的通用ViewHold

    在写ViewList的时候要写Adapter的时候,经常大量的代码都是差不多的. 1 ViewHold 2 if(convertView ==null ){}else{} 3 setTag 4 FIn ...

  7. 微信公众号开发java框架:wx4j(MenuUtils篇)

    wx4j-MenuUtils使用 函数说明:发送http请求到微信服务器,完成菜单创建 参数:构造菜单对象 返回值:微信响应的json字符串 public static String createMe ...

  8. 浅谈C#中show和showDialog的区别

    [转载] A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.ShowDialog方法 (窗体显示为模式窗体)  Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如 ...

  9. nginx开机自启动

    配置步骤:1 . vi /etc/init.d/nginx2. chkconfig --level nginx 2345 on --重点 --------------------以下为nginx配置文 ...

  10. 子组件通过$emit触发父组件的事件时,参数的传递

    子组件.vue <template> <div> <el-table :data="comSchemaData" highlight-current- ...