快速幂

参考快速幂
什么意思呢? 就是优化指数
传统的指数计算 比如计算5^10000,那么就要计算10000次
而快速幂计算 5^10000,我们可以计算 25^5000,一下就把运算次数减少了5000,也可以继续优化,比如可以继续化成625 * 2500就这样一直优化,举一个简单的例子
计算2^5
如果当前指数是奇数,那么可以写成 2^5 =(2^(5/2)) ^ 2 * 2,除法向下取整,指数变为原来的一半,底数变为原来的平方,那么就是计算16 * 2= 32
那么优化指数就可以分为两种情况:
指数为奇数:优化为底数^(指数-1)底数(把他变为偶数)
指数为偶数:优化为(底数
底数)^(指数/2)

//快速幂
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
long long qmi(int base, int power, int mod)//底数,指数,模
{
    long long res = 1;
    while(power)
    {
        if(p & 1)res *= base % mod;//奇数的最后一位总是1,所以&1运算就是判断当前数是否为奇数,如果是奇数,那么就先把2^5=(2^(5/2)) ^ 2 * 2后面的*2先乘进结果里面,指数只剩下偶数
        //下面就是指数除二,底数平方
        power >>= 1;//除以二换成向右移一位操作快一些  向下取整
        base *= base % mod;
    }
    return res;
}

日拱一卒无有尽,功不唐捐终入海
一起进步~

posted @ 2021-04-18 22:00  梨花满地  阅读(93)  评论(0)    收藏  举报