50. Pow(x, n) 快速幂【每日一题】

编程入门 行业动态 更新时间:2024-10-10 10:29:05

50. Pow(x, n) <a href=https://www.elefans.com/category/jswz/34/1771431.html style=快速幂【每日一题】"/>

50. Pow(x, n) 快速幂【每日一题】

50. Pow(x, n)

思路

          快速幂的实现,思路很简单,类比了二进制数转十进制的法子,比如 1001 = 1 * 23+0 * 22+0 * 21+1 * 20。那么xn,你假设 n=5 ,n = 101是吧,

x^5 = *x^(4*1) * x^(2*0) * x^(1*1)

那不就是把 n 对应 1 的位置相乘嘛,因为任何数的0次方都是1,所以0的位置可以不用管,而且,基数是从

x^1--------->x^2-------------->x^4------------>x^8-------->

每次翻倍

代码

class Solution:def myPow(self, x: float, n: int) -> float:flag = n<0n = abs(n)  # 这个都是为了判断负数次方  res = 1while n:    # 这才是快速幂的过程 if n&1: # n 的二进制当前位是 1, 是0就乘0次方,乘1 就当没乘 所以省略了res *= x    # 那就乘当前的基x *= x          # 每次基都翻倍n >>= 1         # 右移一位,其实就是判断前一位if flag:return 1.0/resreturn res

有时候题目要求说要模 109+7

class Solution:def myPow(self, x: float, n: int) -> float:mod = 10**9+7flag = n<0n = abs(n)  # 这个都是为了判断负数次方  res = 1while n:    # 这才是快速幂的过程 if n&1: # n 的二进制当前位是 1, 是0就乘0次方,乘1 就当没乘 所以省略了res *= res * x % mod   # 那就乘当前的基x = x * x % mod            # 每次基都翻倍n >>= 1                    # 右移一位,其实就是判断前一位if flag:return 1.0/resreturn res

更多推荐

50. Pow(x, n) 快速幂【每日一题】

本文发布于:2024-03-12 06:53:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1730940.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:快速   Pow

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!