ETH官方钱包

前往
大廳
主題

UVa 374 - Big Mod

狼性典範 | 2023-02-05 23:14:38 | 巴幣 0 | 人氣 240

/* 快速冪 + 模運算定律,參考的是這位大神的寫法 */
// 不過她的最後一行 else 的 base 好像忘記補 % mod,可能導致 overflow
// 小弟補了一下,有錯請糾正

#include <iostream>

using namespace std;

long long BigMod(long long base, long long power, long long mod)
{
    if (power == 0)
        return 1;
    else if (power == 1)
        return base % mod;
    else if (power%2 == 0)
    {   // (160^4 % 120) = ((160^2 % 120) * (160^2 % 120)) % 120
        long long val = BigMod(base, power/2, mod);
        return (val * val) % mod;
    }
    else
    {   // (160^9 % 120) = ((160^4 % 120) * (160^4 % 120) * (160^1 % 120)) % 120
        long long val = BigMod(base, power/2, mod);
        return (val * val * (base % mod)) % mod;
    }
}

int main()
{
    // B^P % M = (B % M)^P % M
    // (B1 * B2) % M = ((B1 % M) * (B2 % M)) % M

    long long B, P, M;
    while (cin >> B >> P >> M)
        cout << BigMod(B, P, M) << "\n";

    return 0;
}

創作回應

更多創作