快速幂 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;
} 
相关推荐
小苏兮9 分钟前
【数据结构】二叉搜索树
开发语言·数据结构·c++·学习·1024程序员节
腾昵猫11 分钟前
程序员的自我修养(三)
c++
晨曦(zxr_0102)17 分钟前
CSP-X 2024 复赛编程题全解(B4104+B4105+B4106+B4107)
数据结构·c++·算法
ai安歌18 分钟前
【Rust编程:从新手到大师】 Rust 控制流深度详解
开发语言·算法·rust
Shinom1ya_20 分钟前
算法 day 36
算法
·白小白21 分钟前
力扣(LeetCode) ——15.三数之和(C++)
c++·算法·leetcode
海琴烟Sunshine23 分钟前
leetcode 268. 丢失的数字 python
python·算法·leetcode
CL.LIANG26 分钟前
视觉SLAM前置知识:相机模型
数码相机·算法
无限进步_42 分钟前
深入理解C语言scanf函数:从基础到高级用法完全指南
c语言·开发语言·c++·后端·算法·visual studio
Lei_3359671 小时前
[算法]十大排序
数据结构·算法·排序算法