B super_log
链接:https://nanti.jisuanke.com/t/41299
题目意思:求a ^a ^a …… ^a (b个a)对m取模的结果。
思路:欧拉降幂。这题一开始想得复杂了,考虑了扩展欧拉降幂,因为取模的m与a可能不互质,后来发现并不需要,直接写就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
long long eular(long long n)
{
long long ans = n;
for(int i = 2; i*i <= n; i++)
{
if(n % i == 0)
{
ans -= ans/i; //等价于通项,把n乘进去
while(n % i == 0) //确保下一个i是n的素因数
n /= i;
}
}
if(n > 1)ans -= ans/n; //最后可能还剩下一个素因数没有除
return ans;
}
ll gcd(ll a,ll b)
{
if(b==0)return a;
return gcd(b,a%b);
}
ll qpow(ll a,ll b,ll m)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%m;
a=a*a%m;
b>>=1;