洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事。
题意一行就能写下来:
给定\(N,G\),求\(G^{\sum \limits _{d|N}C(N,d)}(\mod999911659)\)
乍一看,指数这么大,要怎么处理好呢?上费马小定理。
平时用费马小定理求逆元用多了,\(a^{p-2}\equiv inv(a)(\mod p)\),搞得蒟蒻差点忘了它原本的样子\(a^{p-1}=1(\mod p)\),那原式的指数\(\sum \limits _{d|N}C(N,d)\)就可以直接在\(\mod999911658\)意义下求了。
首先枚举\(d|N\),这个还好办,直接\(O(\sqrt{N})\)把约数筛出来就好了,注意特判\(N\)为完全平方数的情况。
紧接着我们就碰到了组合数取模。如果模数是个质数还好办,直接上卢卡斯定理。但是\(999911658\)明显不是,把它放到计算器里点一下fact会出来\(2×3×4679×35617\)。
只能用扩展卢卡斯了。所谓扩展卢卡斯,其实就是对于一个非质数的模数,把它质因数分解,求出组合数模每一个质因数的结果。这样等于说得到了一个同余方程组,中国剩余定理还原答案即可。注意对于每一个质因数都要先重新打一遍阶乘表,再对每一个\(N\)的约数算组合数求和取模。
这样指数就求出来了。最后快速幂得到答案。
#include<cstdio>
#include<cmath>
#define LL long long
#define R register LL
#define add(a,b,p) a=(a+b)%p
const LL YL=999911659,N=4e4,pr[4]={2,3,4679,35617};
LL f[N],fac[N],res[4],x,y,t;
LL qpow(R b,R k,R p){//快速幂求b^k%p
R a=1;
for(;k;k>>=1,b=b*b%p)
if(k&1)a=a*b%p;
return a;
}
LL C(R n,R m,R p){//组合数,注意特判
return n<m?0:fac[n]*qpow(fac[m]*fac[n-m],p-2,p)%p;
}
LL lucas(R n,R m,R p){//同样注意特判
return m?C(n%p,m%p,p)*lucas(n/p,m/p,p)%p:1;
}
void exgcd(R a,R b){
if(b)exgcd(b,a%b),t=x,x=y,y=t-a/b*y;
}
int main(){
fac[0]=1;
R n,g,m,p=0,i,j,ans=0;
scanf("%lld%lld",&n,&g);
if(!(g%YL))return puts("0"),0;//又一次注意特判
m=sqrt(n);
for(i=1;i<=m;++i)
if(!(n%i))f[++p]=i,f[++p]=n/i;
p-=f[p-1]==f[p];//还是注意特判,防止被算两次
for(i=0;i<4;++i){
for(j=1;j<pr[i];++j)
fac[j]=fac[j-1]*j%pr[i];
for(j=1;j<=p;++j)
add(res[i],lucas(n,f[j],pr[i]),pr[i]);
//下面中国剩余定理,注意x变成正数
x=1;y=0;exgcd(m=(YL-1)/pr[i],pr[i]);
add(ans,res[i]*(x%pr[i]+pr[i])*m,(YL-1));
}
printf("%lld\n",qpow(g,ans,YL));
return 0;
}
洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)的更多相关文章
- 洛谷 P2480 [SDOI2010]古代猪文 解题报告
P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
[SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...
- 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)
传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- BZOJ.1951.[SDOI2010]古代猪文(费马小定理 Lucas CRT)
题目链接 \(Description\) 给定N,G,求\[G^{\sum_{k|N}C_n^k}\mod\ 999911659\] \(Solution\) 由费马小定理,可以先对次数化简,即求\( ...
- 【bzoj1951】[Sdoi2010]古代猪文 费马小定理+Lucas定理+中国剩余定理
题目描述 求 $g^{\sum\limits_{k|n}C_{n}^{\frac nk}}\mod 999911659$ 输入 有且仅有一行:两个数N.G,用一个空格分开. 输出 有且仅有一行:一个 ...
- 洛谷 P2480 [SDOI2010]古代猪文 题解【欧拉定理】【CRT】【Lucas定理】
数论综合题. 题目背景 题目背景与题目无关因此省略.题目链接 题目描述 猪王国的文明源远流长,博大精深. iPig 在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为 \(N\).当然,一种语 ...
- 洛谷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} ...
随机推荐
- React-组件 & Props
React元素可以只是DOM标签 const element = <div />; React元素也可以是用户自定义的组件: const element = <Welcome nam ...
- 复习C#的方法Math.Max和Math.Min
温故而知新,今天学习Math.Max和Min的方法.这2个方法,均需要传入2个参数,返回参数中最大值和最小值. class Ac { public void LeanMathFunction() { ...
- MiniProfiler工具介绍(监控EF生成的SQL语句)--EF,迷你监控器,哈哈哈
十年河东,十年河西,莫欺少年穷... 今天是抄袭的别人的博客,不过我感觉蛮好,挺有用,特别是老板让你优化EF项目SQL耗时的情况下,你可以采用这种方式来优化你的LINQ. 时间很宝贵,废话还是不多说, ...
- Luogu P2261 [CQOI2007]余数求和
最近中考放假几天都在怼一道BJOI2018的水题,但卡死在90pts跑不动啊! 然后今天发现终于过了然而Hack的数据全RE了然后就开始找新的题目来找回信心. 然后发现智能推荐里有这道题,然后想了1m ...
- Luogu P3374 【模板】树状数组 1
真正的模板题. 树状数组的思想很简单(不如说背代码更简单),每个节点记录多个节点的信息(每个点存x&(-x)个). 道理可以参见很多大佬的博客,最后前缀和的思想搞一下就好了.不想说也不会说. ...
- [Oracle][DataGuard]Standby数据库文件有损坏时的处理方法
需要参考: [Oracle]Recovering the primary database's datafile using the physical standby, and vice versa ...
- ZooKeeper 典型的应用场景——及编程实现
如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...
- Python基础系列讲解——random模块随机数的生成
随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...
- 个人作业-Week1(新增详细说明)
快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上. 如何提出有价值的问题? 请看这个文章:http://www.cnblogs.com/rocedu/p/5167941.html ...
- 11.18 Daily Scrum
这两天开发人员陆续提交了自己开发的部分. 目前所有开发任务都已经完成,剩下的只是测试和整合,做最后的冲刺. 明天的任务: 李承晗:测试与整合