快速幂学习总结

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

 

转载于:https://www.cnblogs.com/xiaoshanshan/p/3554769.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值