快速幂 c++

一般大家写都是

cpp 复制代码
int ans = 1;
for (int i = 1; i <= a; i ++)
    ans *= x;

时间复杂度

但是这对于我们还不够,我们要


首先我们得知道一个数学知识

那么求 就有以下递归式

a 能2整除

a 不能2整除 (这里a/2是整除)

所以每次都调用 不就是

最后补充一个东西

(i + j = a)

代码:

cpp 复制代码
#include <iostream>
using namespace std;
typedef long long LL;
LL a, b, m;
//m是取模的数
LL q_pow(LL a, LL b, LL m) {
	if(b == 0)
		return 1;
	LL tmp = q_pow(a, b >> 1, m) % m;
	return (b & 1 ? a : 1) * tmp % m * tmp % m;
//b & 1 和 b % 2 == 1 是等价的
}
int main() {
	cin >> a >> b >> m;
	cout << q_pow(a, b, m);
	return 0;
} 
相关推荐
海盗猫鸥1 小时前
C++入门基础篇(1)
开发语言·c++·学习
托尼沙滩裤1 小时前
【js面试题】js的数据结构
前端·javascript·数据结构
逆水寻舟2 小时前
算法学习记录2
python·学习·算法
羞儿2 小时前
【读点论文】基于二维伽马函数的光照不均匀图像自适应校正算法
人工智能·算法·计算机视觉
续亮~2 小时前
6、Redis系统-数据结构-03-压缩列表
数据结构·数据库·redis
青衫酒1453 小时前
中国剩余定理
算法
鸽鸽程序猿3 小时前
【数据结构】顺序表
java·开发语言·数据结构·学习·算法·intellij idea
Thunter_3 小时前
[QT入门]树形视图控件
开发语言·c++·qt
Chris-zz3 小时前
C++:继承
开发语言·c++·算法·学习方法
硕风和炜3 小时前
【LeetCode:3033. 修改矩阵 + 模拟】
java·算法·leetcode·矩阵·模拟