快速幂(二分求幂)

1. 求幂取模问题

在这里插入图片描述在这里插入图片描述

2. 求幂取模问题进阶

在这里插入图片描述

2.1 递归解法

在这里插入图片描述

typedef long long LL;
//求a^b % m,递归写法
LL binaryPow(LL a,LL b,LL m){
	if(b == 0) return 1; //如果b为0,那么a^0=1
	//b为奇数,转换为b-1
	if(b % 2 == 1) return a * binaryPow(a,b-1,m) % m;
	else{//b为偶数,转换为b/2
		LL mul = binaryPow(a,b/2,m);
		return mul*mul % m;
	}
}

注意

  • 符号 * 和符号 % 的优先级是一样的,所以会按照先左后右的顺序计算。
  • 条件 if(b % 2 == 1) 可以用 if(b & 1) 代替。这样通过“与”运算,速度会快很多。
  • 在这里插入图片描述
  • 在这里插入图片描述

2.2 迭代解法

递归写法和迭代写法的效率差不多,我更喜欢递归,因为简单吧
在这里插入图片描述在这里插入图片描述在这里插入图片描述

3. 题型训练

  1. 人见人爱A^B

4. 参考文档

  1. 算法笔记
发布了173 篇原创文章 · 获赞 3 · 访问量 5228

猜你喜欢

转载自blog.csdn.net/yc_cy1999/article/details/105442881
今日推荐