快速幂
参考快速幂
什么意思呢? 就是优化指数
传统的指数计算 比如计算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;
}
日拱一卒无有尽,功不唐捐终入海
一起进步~

浙公网安备 33010602011771号