1412 - 快速幂

题目描述

求xp mod m 的值。(mod代表取余数)

提示:若 pp 为偶数,xp==(xp/2p/2)2;若 p 为奇数,xp=x*(x(p−1)/2(p−1)/2)2,该题可以采用分治法求解。

输入

x,p 是不超过 109 的非负整数,m是不超过 109 的正整数。

输出

xp mod m 的值。

样例

输入

复制

2 10 100
输出

复制

24
#include 
using namespace std;

// 快速幂函数
long long fastPower(long long x, long long p, long long m) {
    long long result = 1;
    x = x % m;

    while (p > 0) {
        if (p % 2 == 1) {
            result = (result * x) % m;
        }
        p = p / 2;
        x = (x * x) % m;
    }

    return result;
}

int main() {
    long long x, p, m;
    cin >> x >> p >> m;

    long long ans = fastPower(x, p, m);
    cout << ans << endl;

    return 0;
}    

你可能感兴趣的:(算法,数据结构)