题意:
给定两个数n和m,求
。
题解:
使用欧拉定理降幂公式:
这里引用一位大佬的公式证明:欧拉降幂公式的证明
代码:
#include <iostream> #include <algorithm> #include <cstdio> typedef long long int ll; using namespace std; ll quick_pow(ll a,ll b,ll m) { ll ans=1; while(b) { if(b&1) ans=(ans*a)%m; a=(a*a)%m; b/=2; } return ans; } ll phi(ll m) { ll ans=m; for(ll i=2; i*i<=m; i++) { if(m%i) continue; while(m%i==0) m/=i; ans=ans/i*(i-1); } if(m!=1) ans=ans/m*(m-1); return ans; } ll f(ll n,ll m) { if(m==1) return 0; if(n==1) return 1%m; if(n==2) return 2%m; if(n==3) return 9%m; if(n==4) return 262144%m; ll p=phi(m); return quick_pow(n,p+f(n-1,p),m); } int main() { ll n,m; scanf("%lld%lld",&n,&m); printf("%lld\n",f(n,m)%m); return 0; }
本文介绍了一种使用欧拉定理解决数论中特定问题的方法,通过欧拉降幂公式来简化计算过程。代码示例展示了如何在C++中实现快速幂运算和欧拉函数,以高效解决给定两个数n和m的特定数学问题。
欧拉降幂公式&spm=1001.2101.3001.5002&articleId=82984569&d=1&t=3&u=47bd2bf97316452a88c920b40cc6c8b6)
3470

被折叠的 条评论
为什么被折叠?



