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

Luogu P1405 苦恼的小明 题解

前言

题目传送门 Luogu P1405 苦恼的小明

题意

\(a_1^{a_2^{\cdots^{a_n}}}\)\(10007\) 取余的结果。\(n\le 1234567\)

思路

看到一百万层的幂塔,立刻能想到扩展欧拉定理。这个东西可以大大降低指数的大小。

我们用扩展欧拉定理对这个幂塔进行化简:

\[\begin{aligned} a_{1}^{a_2^{a_{3}^{\cdots^{a_{n}}}}}\equiv a_{1}^ {a_2^{a_3^{\cdots^{a_n}\mathrm{~mod~}\varphi(\varphi(\cdots\varphi(p)))+\varphi(\varphi(\cdots\varphi(p)))} \mathrm{~mod~}\varphi(\varphi(p))+\varphi(\varphi(p))} \mathrm{~mod~}\varphi(p)+\varphi(p)}\ (\ \bmod p\ ) \end{aligned} \]

(最后一个 \(\bmod p\) 是同余的模,不在指数中哦)

呃。。。真的有在化简吗(?

不管怎么说,现在指数虽然变长了,但值也变小了。而且这个式子长成一个非常典型的递归结构,我们不难看出可以从第一层开始逐层向上爬,求出幂塔的每一层指数,根据扩展欧拉定理,设这一层取模的模数是 \(m_i\) ,如果它 \(\ge \varphi(m_i)\) 就进行取模再加,否则不变。然后我们在回溯的过程中逐层用快速幂求得最后答案即可。

还容易观察到,这个不断嵌套的 \(\varphi(p)\) 在至多十四轮嵌套之后就会变成 \(1\) ,而任何数模 \(1\) 都得 \(0\) ,所以在递归过程中,我们若发现 \(m_i=1\) ,就可以直接返回了。

还需要注意到,每一层幂塔的指数与 \(\varphi(m_i)\) 的大小关系决定了要不要取模,而这个指数就是上一层递归的答案,\(\varphi(m_i)\) 就是上一层递归的模数。所以我们递归不仅要返回当前的答案,还要返回当前层答案与模数的大小关系,以供后续层使用。

代码

由于式子实在繁琐,可能有文字无法叙述清楚的地方,可结合代码更好理解。

#include<iostream>
#define fastio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
#define pib pair<int, bool>
#define mkp(a, b) make_pair((a), (b))
#define MIKU 0
using namespace std;const int MOD = 10007;int n, a[1234570];
int ans = 1;int qpow(int a, int n, int m) {  //普通的快速幂int ans = 1;a %= m;while(n > 0) {if(n & 1) ans = ans * a % m;a = a * a % m;n >>= 1;}return ans;
}int phi(int a) {  //普通的求欧拉函数int ans = a;for(int i=2; i*i<=a; i++) {if(a % i == 0) {while(a % i == 0) a /= i;ans = ans / i * (i - 1);}}if(a > 1) ans = ans / a * (a - 1);return ans;
}pib calc(int k, int m) {  //需要两个返回值if(k == n) return {a[k], a[k] >= phi(m)};  //最后一层没有指数,直接返回,同时返回大小关系if(m == 1) return {0, 1};  //如果模数减到一,说明后面还有多层幂塔,一定是大于模数的,大小关系为 true 。int ans = a[k], pm = phi(m);auto [pw, f] = calc(k+1, pm);  //pw:指数 f:指数与 φ(m) 的大小关系return f ? mkp(qpow(ans, (pw % pm) + pm, m), true) : mkp(qpow(ans, pw, m), pw > pm);  //按照大小关系决定要不要对指数取模,同时把本层的大小关系传递给下层。如果取了模,因为又加了模数,所以一定是大于。
}signed main() {fastio;cin>>n;for(int i=1; i<=n; i++) cin>>a[i];int ans = calc(1, MOD).first;cout<<ans;return 0;
}
http://www.jsqmd.com/news/444095/

相关文章:

  • 2026大学直升预科班推荐,高二毕业可以读的国际高中预科班 - 品牌2026
  • 2026年沐浴露品牌深度测评:基于成分香氛与肤质适配的五维战力全解析 - 品牌推荐
  • 【武汉东湖学院主办|IEEE-CPS出版 | EI、Scopus双检索】2026年数智组织与管理国际学术会议(ICDIOM 2026)
  • Qwen3-Embedding国产化部署
  • 2026年ptfe高速线缆绝缘卷包膜品牌厂家推荐榜单 - 资讯焦点
  • 高精度纳米3D打印优质品牌供应商甄选推荐 - 品牌推荐大师
  • 2025宝妈收藏|中国十大童装品牌大盘点!颜值+品质双在线,闭眼入不踩雷 - 品牌测评鉴赏家
  • 标记点全新升级!自带弹窗真的太方便了
  • 北京美国留学中介费为何差距这么大?一问看懂全部真相! - 资讯焦点
  • Meta创始人押注生命科学:NMN哪个牌子最好?认准京东销冠奥本元Aoisao - 资讯焦点
  • 2026年聚氨酯发泡材料与喷涂工程厂家推荐:软泡/硬质聚氨酯、AB料、黑白料专业供应商 - 品牌推荐官
  • 2026 电池放电仪、电池内阻仪哪个厂家好?国内三大品牌深度解析 - 深度智识库
  • 2026必看!中国十大童装品牌大揭秘 - 品牌测评鉴赏家
  • 2026年家庭洗护必看:沐浴露品牌选购指南核心功效指标实测对比。 - 品牌推荐
  • 2026年家庭洗护必看:沐浴露品牌选购指南与核心功效指标实测对比。 - 品牌推荐
  • 世界冠军代言价格多少?运动员代言有那些权益? - 资讯焦点
  • 论文AI率怎么降?2026年实用工具与方法全指南 - agihub
  • 2026年精致沐浴生活指南:五大沐浴露品牌选型实测场景化适配建议 - 品牌推荐
  • 2026年度:高精度纳米3D打印优质品牌供应商甄选推荐 - 品牌推荐大师
  • 2026年沐浴露品牌深度测评:基于留香持久与肤感体验的五维战力解析 - 品牌推荐
  • 2026年沐浴露品牌深度测评:基于香氛持久与肤感体验的五维战力解析。 - 品牌推荐
  • 2026年沐浴露品牌深度测评:基于香氛持久与肤感体验的五维战力解析, - 品牌推荐
  • 上海阿里邮箱服务商客服电话是多少?2026年最新汇总快速获取咨询热线 - 品牌2026
  • 2026年沐浴露品牌深度测评:基于香氛持久与肤感亲和的五维对比解析 - 品牌推荐
  • PDF文件合并工具软件
  • 2026年重庆零担运输厂家榜单 实力过硬服务贴心 满足多样化运输诉求 口碑优良效率出众 - 深度智识库
  • 2026年AMR搬运机器人厂家深度测评:基于导航精度与场景适配的五维战力解析。 - 品牌推荐
  • 人力资源外包深度排名分析:从专业度到性价比的全面评测 - 包罗万闻
  • 2026年研发管理咨询公司权威榜单发布:十大机构实战能力与行业格局深度解析 - 品牌推荐
  • 深入解析:Flutter for OpenHarmony 进阶:体育计分系统与数据持久化深度解析