目录
概要
在一些C语言的算法比赛或者C语言算法考试当中,往往不能直接使用现成的算法库,需要自己去写一些操作,这些操作统一记录在C语言算法小工具系列当中。
工具类型
快速幂函数
用于计算a
的b
次方。它使用了分治的思想,将指数b
不断除以2,然后递归计算,最后将结果相乘。
技术细节
代码实现
// 求a^b
long long qpow(int a, int b) {
long long ans = 1;
if (b == 0)
return 1;
// 如果指数是偶数就不走这个if,如果指数是奇数(1),则最后在乘上一个a
if (b % 2)
ans = a;
long long t = qpow(a, b / 2);
return t * t * ans;
}
其他
带模取的快速幂函数
// 求a^b (mod mod)
long long qpow(int a, int b, long long mod) {
long long ans = 1;
if (b == 0)
return 1;
// 如果指数是偶数就不走这个if,如果指数是奇数(1),则最后在乘上一个a
if (b % 2)
ans = a;
long long t = qpow(a, b / 2);
// % 运算符的优先级低于*、/、+、-。
/*
计算 t * t,得到 t 的平方。
将步骤1的结果对 mod 取模,即计算 (t * t) % mod。
将步骤2的结果与 ans 相乘。
将步骤3的结果对 mod 取模,即计算 ((t * t) % mod * ans) % mod。
*/
return t * t % mod * ans % mod;
}