描述
设p = (b ^ c) % d,
q = (a ^ p) % d。
其中 ^ 为次方运算。
输入
四个正整数a、b、c、d。(1 <= a、b、c、d <= 1e18)
输出
q的值,然后换行。
样例输入
4
3
2
1000000007
样例输出
262144
快速乘的基本原理(转):
代码:
#include<iostream>
using namespace std;
typedef long long ll;
//快速乘
ll quickmultiply(ll a, ll b, ll mod)
{
ll ans = 0;
a %=mod;
while (b)
{
if (b & 1)
{
ans = (ans + a) % mod;
}
a = (a + a) % mod;
b >>= 1;
}
return ans;
}
//快速幂
ll quickpower(ll a, ll b, ll mod)
{
ll ans = 1 % mod;
while (b)
{
if (b & 1)
{
//利用快速乘返回ans*a的值
ans = quickmultiply(ans, a, mod);
}
//利用快速乘使a自乘一次
a=quickmultiply(a, a, mod);
//b向右移动一位;比如原来是1001,移动后变为100
b >>= 1;
}
return ans;
}
int main()
{
ll a, b, c, d, p, q;
cin >> a >> b >> c >> d;
p = quickpower(b, c, d);
q = quickpower(a, p, d);
cout << q << endl;
return 0;
}