问题:
题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型
这个题目如果按照一般的循环来做的话,就会出现以下的两个问题:
1. 即使整数用 long long 也会溢出。
2. 当p(幂)的大小超过10^8,程序就不能在一秒钟之内运行出结果。
要解决第一个问题,就需要在每进行一次乘法运算时就取一次模,因为:
a*b%c = (a%c)*(b*c)%c
要解决第二个问题,就需要用到快速幂运算:
例如 a^b
先把b转换成二进制数
该二进制数第i位的权为 2^(i-1)
举个例子
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将 a^11 转化为算 a^(2^3+2^1+2^0)
因此就将本来是 b 次的循环转化为 log2(b)次。
代码如下:
1. 循环实现
long long function(long long