题解:P10414 [蓝桥杯 2023 国 A] 2023 次方
wangbinfeng · · 题解
- 本题解于
2024 年 05 月 30 日彻底重构,点击查看原题解备份。关于原题解的一些话:评论区有同学反应做法存在缺陷或错误,本人已经搬运所有评论至备份区。希望有数论大佬可以和我讨论一下原题解的正确性或对于本题结果正确的原因。拜谢并对被我误导的同学诚恳道歉!
前置知识:拓展欧拉定理,建议先做模板题。
本题要求
优先考虑费马小定理,但是很可惜的是,
考虑欧拉定理,欧拉定理要求
考虑拓展欧拉定理,当
计算
算出答案为 869,代码如下:
#include<bits/stdc++.h>
using namespace std;
const int n=2023,mod=2023;
inline int get_eular(int n){
int ret=n;
for(int i=2;i<=n/i;i++)if(n%i==0){
while(n%i==0)n/=i;
ret=ret/i*(i-1);
}
if(n>1)ret=ret/n*(n-1);
return ret;
}
inline int quick_pow(const int a,const int b,const int mod){
if(!b)return 1;
const int ret=quick_pow(a,b/2,mod);
return ret*ret%mod*(b%2?a:1)%mod;
}
inline int get_ans(const int a,const int mod){
if(a==n)return a;
return quick_pow(a,get_ans(a+1,get_eular(mod))+get_eular(mod),mod);
}//由于代码是重构而来,作者偷懒并没有重写欧拉函数相关代码。求欧拉函数可以先预处理以加快代码运行速度
signed main(){
cout<<get_ans(2,mod);
}
最后放个小花絮:点击这里查看。