跳转至

牛客-996C 64位整数乘法(快速幂)

链接:https://ac.nowcoder.com/acm/contest/996/C

题目描述

求 a 乘 b 对 p 取模的值,其中1 \leq a,b,p \leq 10^{18}

输入描述:

第一行a,第二行b,第三行p。

输出描述:

一个整数,表示a \times b \bmod p的值。

示例1

输入

2
3
9

输出

6

#include <bits/stdc++.h>

using namespace std;

long long calculate(long long a, long long b, long long p)
{
    long long res = 0;
    while (b) {
        if (b & 1) res = (res + a) % p;
        a = a * 2 % p;
        b >>= 1;
    }

    return res;
}


int main()
{
    std::ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    long long a, b, p;
    cin >> a >> b >> p;

    cout << calculate(a, b, p) << endl;

    return 0;
}