快速幂算法
先来一道洛谷水题
这题并不难理解,但是要做出来要理解一种算法:快速幂
举个例子:计算2的81次方。如果要一次一次的递增运算,要计算81次,快速幂算法能够大大减少要运算的次数:
2^81 = 2 ^ 80 * 2
= 2 ^ (40 *2) 2
=4 ^ 40 * 2
=4 ^ (220) *2
=16 ^ 20 * 2
=16 ^ (2 *10) *2
=256 ^ 10 * 2
= 256^(2 * 5 ) *2
= 65536 ^ 5 *2
= 65536 ^4 * 65536 * 2
= 65536 ^(2 * 2) * 65536 * 2
= 65536 ^2 * 65536^2 *65536 *2
大概就是这么个思想,算法的复杂度大概是log2 n
上面题目的代码如下
// An highlighted block
#include <stdio.h>
int ksm(long long int value, long long int pow,long long int mod)
{
long long int result = 1;
while