洛谷P2480 [SDOI2010]古代猪文
要求(图是盗来的QAQ)
首先用欧拉定理把幂模一下,直接就是MOD-1了
然后发现MOD-1可以分解为2,3,4679,35617,都是质数,可以直接用Lucas定理
然后用中国剩余定理合并一下即可
千万不可把MOD和MOD-1搞混了,否则调试好麻烦的
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#define MAXN 35617+10
#define ll long long
#define pb push_back
#define ft first
#define sc second
#define mp make_pair
using namespace std;
ll c[],m[]={,,,,};
ll MOD=;
ll N,G;
ll inv[MAXN],finv[MAXN],fac[MAXN];
ll Pow(ll a,ll b,ll p){
ll ret=1LL;
while(b){
if(b&){
(ret*=a)%=p;
}
(a*=a)%=p;
b>>=;
}
return ret;
}
ll Inv(ll x,ll p){
return Pow(x,p-,p);
}
ll C(ll n,ll m,ll p){
if(n<m)return 0LL;
return fac[n]*finv[m]*finv[n-m]%p;
}
ll Lucas(ll n,ll m,ll p){
if(!m)return 1LL;
if(n>=p||m>=p){
ll nn=n%p,mm=m%p;
if(nn<mm)return 0LL;
return Lucas(n/p,m/p,p)*C(nn,mm,p)%p;
}
else{
return C(n,m,p);
}
}
ll solve(ll p){
fac[]=fac[]=;
finv[]=finv[]=;
inv[]=;
for(int i=;i<p;i++){
fac[i]=fac[i-]*i%p;
inv[i]=p-(inv[p%i]*(p/i)%p);
finv[i]=finv[i-]*inv[i]%p;
}
ll t=sqrt(1.0*N);
ll ret=0LL;
for(ll i=;i<=t;i++){
if(N%i==){
ret+=Lucas(N,i,p);
if(N/i!=i){
ret+=Lucas(N,N/i,p);
}
}
}
return ret;
}
ll CRT(){
ll M=MOD-;
ll ret=0LL;
for(int i=;i<=;i++){
ll t=Inv(M/m[i],m[i])%M*(M/m[i])%M;
ret+=t*c[i]%M;
ret%=M;
}
return ret;
}
int main()
{
scanf("%lld%lld",&N,&G);
if(G%MOD==){
printf("0\n");
return ;
}
for(int i=;i<=;i++) c[i]=solve(m[i]);
ll x=CRT();
ll ans=Pow(G,x,MOD);
printf("%lld\n",ans);
}
洛谷P2480 [SDOI2010]古代猪文的更多相关文章
- 洛谷 P2480 [SDOI2010]古代猪文 解题报告
P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- 洛谷 P2480 [SDOI2010]古代猪文 题解【欧拉定理】【CRT】【Lucas定理】
数论综合题. 题目背景 题目背景与题目无关因此省略.题目链接 题目描述 猪王国的文明源远流长,博大精深. iPig 在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为 \(N\).当然,一种语 ...
- 洛谷P2480 [SDOI2010]古代猪文(费马小定理,卢卡斯定理,中国剩余定理,线性筛)
洛谷题目传送门 蒟蒻惊叹于一道小小的数论题竟能涉及这么多知识点!不过,掌握了这些知识点,拿下这道题也并非难事. 题意一行就能写下来: 给定\(N,G\),求\(G^{\sum \limits _{d| ...
- 洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)
传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p ...
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
- 【洛谷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 ...
- P2480 [SDOI2010]古代猪文 Lucas+CRT合并
\(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长,博大精深. iPig在大肥猪学校图书馆中查阅资料,得知远古时期猪文文字总个数为N.当然,一种语言如果字数很多,字典也相应会 ...
随机推荐
- 结对作业NO.2
结对NO.2 1. 引言 1.1 项目地址 github 生成的一组好数据 1.2 项目简介 按照老师给的项目要求:"编码实现一个部门与学生的智能匹配的程序".由于数据需要自己生成 ...
- C语言第二次博客作业
一.PTA实验作业 题目1:计算分段函数[2] 本题目要求计算下列分段函数f(x)的值: 1.实验代码 int main (void) { double x,y; scanf("%lf&qu ...
- HDFS架构
- 201621123031 《Java程序设计》第4周学习总结
Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:继承.覆盖.多态.抽象 1.2 尝试使用思维导图将这些关键词组织起来. 1.3 可选: ...
- Java课程设计报告——学生成绩管理系统
一.需求分析 1.数据存储在数据库和文件中 2.分为"教师"模块和"学生"模块. 3.学生模块提供登陆功能,登陆成功后可查询数学.Java.体育成绩 (学生学号 ...
- python控制流 If-else
控制流 If-else 我们处理现实生活中的问题时会做出决定,就像决定买哪种相机或者怎样更好的打篮球.同样我们写计算机程序的时候也要做相同的事情.我们通过 if-else 语句来做决定,我们使 ...
- git(一)快速入门
1.设置用户名 git config --global user.name '你的用户名' 2.设置用户名邮箱 git config --global user.email '你的邮箱' 3. ...
- Python内置函数(34)——map
英文文档: map(function, iterable, ...) Return an iterator that applies function to every item of iterabl ...
- js new到底干了什么,new的意义是什么?
学过JS的都知道 创建对象可以这样 var obj=new Object(); var obj=new Function(); 用内置的函数对象来构造对象 还可以这样自定义函数 function te ...
- 浅谈Web网站的架构演变过程
前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...