算A的B的C次方次方
问题描述
//据说很多人的题目会有一大堆废话,本傻×就不在这里废话了。
就是叫你算A的B的C次方次方。
当然了,为了方便起见,把答案%1,000,000,007输出就好。
输入格式
一行,三个整数A,B,C,以空格隔开。
输出格式
输出A的B的C次方次方%1,000,000,007。
题解
根据费马小定理:
若存在整数 a , p 且gcd(a,p)=1,即二者互为质数,则有a^(p-1)≡ 1(mod p)
要求a的x次方时,x可以分为x=k*(p-1)+r,因此a的x次方=a的r次方,此时,r=x%(p-1)。对于本题,我们需要求解a的(b^c)%(p-1)次方
#include <iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
int mod=1000000007;
ll a,b,c;
ll poww(ll x,ll y,ll m){
ll res=1;
while(y){
if(y&1){
res=(res*x)%m;
}
y>>=1;
x=(x*x)%m;
}
return res%m;
}
int main(){
cin>>a>>b>>c;
cout<<poww(a,poww(b,c,mod-1),mod)<<endl;
return 0;
}