第33题:大幂次运算

题目描述:
给你两个正整数a(0 < a < 100000)和n(0 <= n <=100000000000),计算(a^n) % 20132013并输出结果
示例:
输入:
a = 3453 n = 0

输出:
1

思路一:快速幂。

  • 若 b b b是奇数,则 a b = a ∗ a b − 1 a^b =a*a^{b-1} ab=a∗ab−1
  • 若 b b b是偶数,则 a b = a b / 2 ∗ a b / 2 a^b=a^{b/2}*a^{b/2} ab=ab/2∗ab/2
# 快速幂迭代写法
ans = 1
if n == 0:
    print(1)
else:
    while n > 0:
        if n & 1:  # n为奇数时
            ans = ans * a % 20132013
        a = a * a % 20132013
        n >>= 1
    print(ans)

思路二:使用内置的函数pow()。

print(pow(a, n, 20132013))
上一篇:【Java】双引号""和单引号''导致不同的结果


下一篇:我,33岁,字节跳动测试开发,揭 开北京“测试岗”的真实收入