快速幂取余算法,洛谷P1226

这是洛谷普及的一道题目,其实就是个快速幂取模的模版。。。

#include 
using namespace std;

int fpm(int a, int b, int c)
{
     
    int ans = 1; 
    int base = a % c; //每次取模不影响结果的

    if (b == 0) return 1 % c; //特判,任何数的0次幂都是1

    while (b)
    {
     
        if (b & 1)  ans = (ans * base) % c; //用 & 判断奇偶数
        b = b >> 1; // 位运算,相当于 b = b / 2
        base = (base * base) % c; // 这里也类似的进行取模
    }
    return ans;
}

int main()
{
     
    int a,b,c;
    cin >> a >> b >> c;
    cout <<a <<"^" <<b << " mod " << c <<"="<<fpm(a,b,c);
    return 0;
}

你可能感兴趣的:(洛谷,快速幂取模,算法)