【洛谷 P2480】 [SDOI2010]古代猪文(中国剩余定理,Lucas定理)
这题出的有点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定理)的更多相关文章
- 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...
- 洛谷 P2480 [SDOI2010]古代猪文 解题报告
P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- 洛谷 P2480 [SDOI2010]古代猪文 题解【欧拉定理】【CRT】【Lucas定理】
数论综合题. 题目背景 题目背景与题目无关因此省略.题目链接 题目描述 猪王国的文明源远流长,博大精深. iPig 在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为 \(N\).当然,一种语 ...
- 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)
传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...
- 洛谷P2480 [SDOI2010]古代猪文
要求(图是盗来的QAQ) 首先用欧拉定理把幂模一下,直接就是MOD-1了 然后发现MOD-1可以分解为2,3,4679,35617,都是质数,可以直接用Lucas定理 然后用中国剩余定理合并一下即可 ...
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
- 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理
[bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...
- 【洛谷P2480】古代猪文
题目大意:求 \[ G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659 \] 题解:卢卡斯定理+中国剩余定理 利用卢卡斯定理求出指数和式对各个素模数的 ...
- 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理
P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...
- P2480 [SDOI2010]古代猪文
P2480 [SDOI2010]古代猪文 比较综合的一题 前置:Lucas 定理,crt 求的是: \[g^x\bmod 999911659,\text{其中}x=\sum_{d\mid n}\tbi ...
随机推荐
- 部署:阿里云ECS部署Docker CE
1 部署阿里云ECS,选择CentOS操作系统,并启动实例: 2 部署Docker CE: a.检查centos版本: $ cat /etc/redhat-release CentOS Linux r ...
- asp.net webapi 使用小结
一星期前公司用webapi处理一些事情,自己总结一下用法. 1.创建一个空的webapi会默认有一下几个方法. public class ValueController : ApiController ...
- TortoiseGit小乌龟 git管理工具
1.新建分支git远端新建分支: b001本地git目录:右击--TortoiseGit--获取(会获取到新建分支) 2.本地新建分支对应远端分支本地新建分支:b001 关联远端分支b001(之后工作 ...
- 子串查询(二维前缀数组) 2018"百度之星"程序设计大赛 - 资格赛
子串查询 Time Limit: 3500/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- OpenCV平滑处理示例代码
#include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvL ...
- codeforce580c (dfs)
题目意思:给你一棵树,然后每个叶子节点会有一家餐馆,你讨厌猫,就不会走有连续超过m个节点有猫的路,然后问你最多去几家饭店 思路:直接DFS Example Input 4 11 1 0 01 21 3 ...
- DataGridView加载gif图片
当我们想加载图片时,一般情况下都会使用picturebox控件,这个控件可以加载各种格式的图片,当然也包括gif图片.但是有时,我们也希望一些数据展示控件也可以加载图片,比如说DataGridView ...
- 【bzoj1257】[CQOI2007]余数之和sum 数论
题目描述 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如j(5, 3)=3 m ...
- HDU——1394 Minimum Inversion Number
Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...
- 【题解】HAOI2008木棍分割
对于这道题目的两问,第一问直接二分答案求出最短长度.关键在于第二问应当如何求:建立dp方程,dp[i][j]代表到第i个分界线,切了j次(强制在第i处切一刀.这样就不会对后面的状态产生影响).状态转移 ...