洛谷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} ...
随机推荐
- java算法----排序----(5)归并排序
package log; import java.util.Arrays; public class Test4 { /** * java算法---归并排序 * * @param args */ pu ...
- 初始化应用程序数据ng-init指令
ng-init指令初始化应用程序数据. 如果我们想给文本框一个初化的值: <div ng-app="" ng-init="Name='Leo'"> ...
- [Oracle][OnlineREDO]数据库无法启动时的对应策略:
[Oracle][OnlineREDO]数据库无法启动时的对应策略: 1. Start with mount. SQL> conn / as sysdba SQL> startup mo ...
- VS2017一步一步断点调试解决Dapper语句出现的Bug
最近再做一个项目,出现一个小bug,bug虽小,但是却要命啊.下面我show下我解决问题的方法. View层代码: @model List<mhq.Blog.Model.Blog> < ...
- FreeRTOS 任务与调度器(2)
在上一篇我们介绍了FreeRTOS任务的一些基本操作和功能,今天我们会介绍一个很好很强大的功能——任务通知 任务通知可以在不同任务之间传递信息,它可以取代二值信号量.计数信号量.事件标志组.深度为1的 ...
- BugkuCTF web基础$_POST
前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...
- 如何在《救赎之路》中使用CPU粒子效果
Unreal游戏引擎4.19版本的发布,可以使得游戏可以更好地利用Intel多核心处理器的性能,以提供更精彩的游戏体验.这里以<救赎之路>这款优秀的国产独立游戏为例说明如何在游戏中使用CP ...
- Openstack架构概念图-简单汇总
OpenStack是一个云平台管理的项目,它不是一个软件.这个项目由几个主要的组件组合起来完成一些具体的工作.想要了解openstack,第一步我们可以观察他的概念图: 针对上图的翻译+解释: 上图主 ...
- C-代码笔记-输入输出
.ACSII 字符实质和整数存储方式相同 //2018年9月16日01:35:54 # include <stdio.h> int main(void) { '; // printf(&q ...
- 2-Twenty Fourth Scrum Meeting-20151230
前言 因为服务器关闭,我们的开发项目也遭遇停滞一个星期.与网站开发负责人员协商之后,29号开放服务器.我们的项目也能够继续下去.比规定的开发时间(截止为2015/12/29)推迟. 事项安排 1.开发 ...