欧拉降幂
作者:互联网
题目
hdu2837
模板题:
#include <cstdio>//欧拉降幂
#include <cstring>
using namespace std;
typedef long long ll;
ll euler(ll x)
{
ll res=x;
for(ll i=2;i*i<=x;i++)
{
if(x%i==0)
{
res-=(res/i);
while(x%i==0)
x/=i;
}
}
if(x>1)
res-=(res/x);
return res;
}
ll f_pow(ll a,ll b,ll mod)
{
ll res=1;
while(b)
{
if(b&1)
{
res=res*a;
if(res>=mod)//!
res=res%mod+mod;
}
a=a*a;
if(a>=mod)//!
a=a%mod+mod;
b>>=1;
}
return res;
}
ll dfs(ll a,ll b)
{
if(a==0)
return 1;
ll tmp=euler(b);
return f_pow(a%10,dfs(a/10,tmp),b);
}
int main()
{
int t;
ll n,m;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
printf("%lld\n",dfs(n,m)%m);
}
return 0;
}
标签:return,降幂,int,res,ll,dfs,欧拉,mod 来源: https://blog.csdn.net/weixin_43184669/article/details/100542441