#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll euler_phi(ll n)
{
ll res=n;
for(ll i=2;i*i<=n;i++)
{
if(n%i==0)
{
res=res/i*(i-1);
for(;n%i==0;n/=i);
}
}
if(n!=1)
res=res/n*(n-1);
return res;
}
ll quick_mod(ll a,ll b,ll mod)
{
ll res=1;
a%=mod;
while(b)
{
if(b&1)
res=res*a%mod;
a=a*a%mod;
b/=2;
}
return res;
}
bool pd(ll a,ll k,ll phi)
{
ll now=1;
for(int i=1;i<=k;i++,a=now)
for(int j=1;j<=a;j++)
{
now*=a;
if(now>=phi)
return true;
}
return false;
}
ll solve(ll a,ll k,ll mod)
{
ll phi=euler_phi(mod);
if(k==1||phi==1)
return a%mod;
return quick_mod(a,solve(a,k-1,phi)+phi*pd(a,k-1,phi),mod);
}
int main()
{
ll a,k;
while(scanf("%lld%lld",&a,&k)!=EOF)
{
if(a==0)
{
if(k&1)
printf("0\n");
else
printf("1\n");
}
else
printf("%lld\n",solve(a,k,1e8));
}
return 0;
}
hdu 3609数论 快速幂 欧拉函数 迭代 递归
最新推荐文章于 2023-05-28 15:34:13 发布