资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
//据说很多人的题目会有一大堆废话,本傻×就不在这里废话了。
就是叫你算A的B的C次方次方。
当然了,为了方便起见,把答案%1,000,000,007输出就好。
输入格式
一行,三个整数A,B,C,以空格隔开。
输出格式
输出A的B的C次方次方%1,000,000,007。
样例输入
3 4 5
样例输出
763327764
数据规模和约定
0≤A,B,C≤1,000,000,000
标签:取模问题一直没弄清,这次好好弄下
快速幂与取模(同时)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1000000007;
ll exp_mod(ll a,ll n,ll b)
{
ll t;
if(n==0)return 1%b;
if(n==1)return a%b;
t=exp_mod(a,n/2,b);
t=(t%b)*(t%b)%b;
if((n&1)==1)t=(t%b)*(a%b)%b;
return t;
}
int main()
{
ll a,b,c;
scanf("%lld %lld %lld",&a,&b,&c);
ll tmp=0;
tmp=exp_mod(a,exp_mod(b,c,mod-1),mod);
printf("%lld",tmp);
return 0;
}
注意点:
1.a的b的c次方,求解顺序不能错
2.因为费马小定理中有一条:
所以,在第一次调用exp_mod函数的时候,需要取模mod-1(根据上书定理可得证)