当我们遇到类似于求a*b%c这样的问题的时候,如果是a^b%c,当a^b这个数特别大的时候,以至于int范围存不下该值,那最后取模得到的值当然也是错的,这个时候就运用到快速幂取模算法,这种算法的时间复杂度是O(logn),效率非常快,也是常用的几种算法之一。
快速幂取模依赖于以下数学公式:
以及a*b%c = ((a%c)*(b%c))%c
用二分的思想把b分为奇数和偶数,再运用公式按步求解,每次运算的时候进行取模,就可以使得数据不会溢出。具体代码如下:
#include <iostream>
using namespace std;
class fast_exponentiation
{
public:
fast_exponentiation(int a, int b, int c)
{
this->a = a;
<