题目描述
求 a 的 b 次方对 p 取模的值。
输入格式
三个整数 a,b,p ,在同一行用空格隔开。
输出格式
输出一个整数,表示a^b mod p的值。
数据范围
1≤a,b,p≤\(10^{9}\)
输入样例:
3 2 7
输出样例:
2
大致思路:任何一个数都可以写成
\[n = 2^{p_1} + 2^{p_2} + 2^{p_3} \cdots \]
其中\(p_i\)为非负整数,所以可以利用二分把这题算法复杂度降低到logn
#include <iostream>
using namespace std;
int main()
{
int a, b, p;
cin >> a >> b >> p;
int res = 1 % p;
while (b)
{
if (b & 1)
res = res * 1ll * a % p;
a = a * 1ll * a % p;
b >>= 1;
}
cout << res << endl;
return 0;
}