当前位置: 首页 > news >正文

洛谷 P2480 [SDOI2010] 古代猪文 题解

形式化题意

给定 \(n,g\) 和模数 \(P=999911659\)(一个质数),求以下柿子的值。

\[g^{\sum_{i|n}C_n^i} \bmod P \]

知识点

扩展欧拉定理、Lucas 定理、中国剩余定理 CRT、exLucas 算法。

基础数论全家桶。

解法

发现指数会非常大,先用扩展欧拉定理缩小指数,得:

\[g^{\sum_{i|n}C_n^i} \equiv g^{\left(\sum_{i|n}C_n^i\right) \bmod (P-1)} \pmod P \]

现在考虑计算这个柿子:

\[\left(\sum_{i|n}C_n^i\right) \bmod (P-1) \]

于是 \(\mathcal{\Theta}(\sqrt n)\) 枚举 \(i\),求出每个 \(C_n^i \bmod (P-1)\) 即可。

一个问题是,模数 \(P-1\) 不是质数,因此用不了 Lucas 定理。但是发现 \(P-1=2\cdot3\cdot4679\cdot35617\),恰好是四个质数之积。于是可以分别用 Lucas 定理求出 \(C_n^i\)\(2,3,4679,35617\) 取模的结果,然后 CRT 合并即可。这被称为 exLucas 算法。

注意特判 \(g=P\)

Code

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i(a);i<b;++i)
#define per(i,a,b) for(int i(a);i>b;--i)
#define rept(i,a,b) for(int i(a);i<=b;++i)
#define pert(i,a,b) for(int i(a);i>=b;--i)
#define int long long
using namespace std;
constexpr int P=999911659,N=4e4;
constexpr int FAC[4]={2,3,4679,35617};
constexpr int COEF[4]={499955829,333303886,289138806,877424796};
// P-1=2*3*4679*35617
// COEF为CRT的系数,预先计算好
int fac[4][N],inv[4][N];
int ksm(int x,int y,int m){int res=1;while(y){if(y&1) (res*=x)%=m;(x*=x)%=m,y>>=1;}return res;
}
int c(int m,int n,int k){if(m<0||n<0||m<n) return 0;return fac[k][m]*inv[k][n]%FAC[k]*inv[k][m-n]%FAC[k];
}
int lucas(int m,int n,int k){if(!m||!n) return 1;return lucas(m/FAC[k],n/FAC[k],k)*c(m%FAC[k],n%FAC[k],k)%FAC[k];
}
int comb(int m,int n){  // 计算组合数C(m,n) mod (P-1)int res=0;rep(i,0,4){(res+=lucas(m,n,i)*COEF[i])%=P-1;}return res%(P-1);
}
signed main(){int n,g,sum=0;cin>>n>>g;rep(k,0,4){fac[k][0]=inv[k][0]=1;rep(i,1,FAC[k]) fac[k][i]=fac[k][i-1]*i%FAC[k];inv[k][FAC[k]-1]=ksm(fac[k][FAC[k]-1],FAC[k]-2,FAC[k]);pert(i,FAC[k]-2,1) inv[k][i]=inv[k][i+1]*(i+1)%FAC[k];}if(g%P==0){  // 特判cout<<0;return 0;}for(int i=1;i*i<=n;++i){if(n%i==0){(sum+=comb(n,i))%=P-1;if(i*i<n) (sum+=comb(n,n/i))%=P-1;}}cout<<(ksm(g,sum,P)+P)%P<<endl;return 0;
}
http://www.jsqmd.com/news/330198/

相关文章:

  • 百度智能云边缘云服务器,端云协同赋能全域智能场景
  • AI中国故事加篇-对话董仲舒—天人感应与AI伦理:大一统、教化系统与责任框架
  • ue metahuman 头发更换实战
  • 四大厂商云服务器安全创新对比,筑牢数字化转型安全底座
  • 主流中石化加油卡回收方式
  • No141:AI世间故事-对话黑格尔——辩证法与AI演化:绝对精神、否定之否定与历史理性
  • TRAE提示词技巧完全指南:6大场景助你高效开发
  • 短视频分享网站的设计与实现 (开题报告)
  • 大数据深度学习|计算机毕设项目|计算机毕设答辩|基于Django的京东智能家电销量数据分析系统设计与实现
  • 超市管理系统 盐城工学院开题报告
  • 超市管理系统的设计与实现 桂林理工大学 开题报告
  • 明明环境变量已经解密,为啥@ConfigurationProperties 注入还是加密值?
  • 电网缴费系统-开题报告
  • 死锁是怎么发生的,举个简单的例子
  • 学长亲荐 9 个降AIGC网站 千笔·专业降AI率智能体解决论文AI痕迹
  • 横评后发现 9个AI论文软件:继续教育必看!毕业论文+格式规范全攻略
  • 一篇搞定全流程AI论文网站,千笔 VS 灵感ai,MBA专属神器!
  • 救命神器10个降AI率平台推荐!千笔AI帮你轻松降AIGC
  • 冥想第一千七百八十一天(1781)
  • Java毕设项目推荐-基于springboot 网上鲜花销售系统基于springboot的攀枝花市鲜花销售系统【附源码+文档,调试定制服务】
  • 2026必备!10个降AIGC工具推荐,千笔·降AIGC助手助你轻松降AI率
  • 计算机Java毕设实战-基于springboot智能鲜花商店销售系统基于springboot的攀枝花市鲜花销售系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Java毕设选题推荐:基于spring基于springboot的攀枝花市鲜花销售系统基于 SpringBoot 的鲜花电商与库存一体化运营平台 【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 课件2-1:列表(List)详解
  • 【课程设计/毕业设计】基于 SpringBoot 的鲜花电商与库存一体化运营平台 基于springboot的攀枝花市鲜花销售系统【附源码、数据库、万字文档】
  • 【计算机毕业设计案例】基于springboot的攀枝花市鲜花销售系统基于java+springboot+vue+mysql的攀枝花市鲜花销售系统(程序+文档+讲解+定制)
  • 课件1-3:Python输入输出
  • Java计算机毕设之基于java+springboot+vue+mysql的攀枝花市鲜花销售系统基于springboot的攀枝花市鲜花销售系统(完整前后端代码+说明文档+LW,调试定制等)
  • Python核心语法-python数据类型转换和Python运算符 - 努力-
  • DB-GPT 0.7.4 版本更新|开源蚂蚁集团Text2SQL信息集:Falcon、支持GLM-4.5大模型