核心:
1.把b想成2进制
2.参考下面式子:a^7=a^111=(a^2)^0+(a^2)^1+(a^2)^2
3.把握取模公式的运用,例如下图:
最终的代码:
include[HTML_REMOVED]
using namespace std;
include[HTML_REMOVED]
int main()
{
long long a, b, p;
cin >> a >> b >> p;
long long res = 1%p;
int i = 0;
while (b)
{
if (b & 1)
{
res=res*a%p;
}
a=a*a%p;
b >>= 1;
}
cout << res%p;
return 0;
}
注意:
&运算符是双目运算符 两个数二进制数位都为1才会得到1,如下111&1=001=1 10101&01101=00101=5
所以通常用a&1判断a的二进制中最右边位数是1还是0
=a是运算符 a是指向右移动的位数,例如6(110)>>=1就会变成3(11)
用这语句 a&1 和 a>>=1 可以判断a二进制中每一位是1还是0