HDU2837
题解:
看成是一道欧拉降幂公式的模板题吧。快速幂模板要修改一下,其它的都一样。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
ll euler(ll n){
ll ans = n;
for(int i=2;i*i<=n;i++){
if(n % i == 0){
ans = ans / i * (i - 1);
while(n % i == 0) n /= i;
}
}
if(n > 1) ans = ans / n * (n - 1);
return ans;
}
ll pow(ll a,ll n,ll mod){
ll ans = 1;
while(n){
if(n&1){
ans = ans * a;
if(ans > mod)
ans = ans % mod + mod;
}
a = a * a;
if(a > mod)
a = a % mod + mod;
n >>= 1;
}
return ans;
}
ll dfs(ll n,ll m){
if(n == 0) return 1;
ll phi = euler(m);
return pow(n%10,dfs(n/10,phi),m);
}
int main(){
int T; cin>>T;
while(T--){
cin>>n>>m;
cout<<dfs(n,m) % m<<endl;
}
return 0;
}