//a * b % c == (a % c) * (b % c)
//上面的是一个公式,接下来将介绍另一个公式,在介绍公式之前,先来看一个有关二进制的东西,那10进制数 11 来说 把11转为二进制1011,也就是2^3 + 2^1 + 2^0;在介绍一个初中的公式,a^(a1+a2+a3+……+an)==a^a1 * a^a2 * a^a3 *……* a^an;好有了这些预备知识,现在来讲重点
//要求 a ^ b % c 这个结果该怎么做呢? 首先将 b 拆成 二进制,然后就会出现a1+a2+a3+……+an,所以a ^ b % c == a ^ (a1 + a2 +a3+……+an) % c == a^a1 * a^a2 * a^a3 *……* a^an;
//下面是我提供的代码;
#include <iostream>
#define MOD 100000007
using namespace std;
long long quick_mi(long long a,int b) {
int ans = 1;
while (b) {
if (b % 2) ans = ans * a % MOD;
a = a * a % MOD;
b = b >> 1;
}
return ans;
}
int main (){
int a,b;
cin >> a >> b;
cout << quick_mi(a,b) << endl;
}