题目
求A^B的最后三位数
解法
- 首先需要知道一个公式:
( a * b ) % c = ( ( a % c ) * ( b % c ) ) % c
为什么需要这个公式?
a*b的结果可能出现溢出,所以取模之后就不会了
- 快速幂解法
2.1 首先将幂指数用二进制表示,例如:313 =31101 = 38 * 34 * 31。所以最后的结果就是将二 进制中为1的系数幂乘起来即可
2.2 第二步就是计算31,34,38
31 = 3
32 = (32)1
34 = (32)2
38 = (34)2
从上面的表达式可以看出来,后一个数都是前一个数的平方。
3.下面来看,具体解法:
long long fun(long long base, long long power)
{
long long result = 1;
long long t = base;
if (power == 0)
return 1;
while (power > 0)//辗转相除法求二进制
{
if (power % 2 == 0)//二进制中为0的位置
{
power = power / 2;//辗转相除法求二进制
t = ((t%1000)*(t%1000))%1000;
}
else//二进制中为1的位置
{
result = ((t%1000)*(result%1000))%1000;//二进制中为1的位置做乘积
t = ((t%1000)*(t%1000))%1000;
power = power / 2;//辗转相除法求二进制
}
}
return result;
}