目录

三个月算法进阶--day53

快速幂

** / pow() O(log n)

浮点取幂

math.pow() O(1)

大数求余

循环取余O(n)、快速幂求余O(log n)

res = 1
while n:
    if n % 2:
        res = (res * base) % p
    base = base ** 2 % p
    n //= 2

剪绳子(数学推导)

每段为e,乘积最大

class Solution:
    def cuttingRope(self, n: int) -> int:
        if n <=3:
            return n-1
        a, b = n // 3, n % 3
        if b == 0:
            return int(math.pow(3, a))
        elif b == 1:
            return int(math.pow(3, a-1)) * 4
        else:
            return int(math.pow(3, a)) * 2