快速幂学习总结

//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;
}

 

posted @ 2014-02-18 19:05  闪光阳  阅读(170)  评论(0编辑  收藏  举报