在 Python 中,判断奇偶数、快速幂算法以及十进制转二进制,其核心逻辑确实是高度统一的。它们都基于**二进制位(Bit)**的逻辑。

我们可以把这些复杂的概念拆解为三个层次来理解。


1. 基础:如何判断奇偶?

在 Python 中有两种主流写法,它们在逻辑上是等价的。

方法 A:取模运算(最常用)
if n % 2 == 1:  # 如果除以 2 余 1,则是奇数
if n % 2 == 0:  # 如果除以 2 余 0,则是偶数

方法 B:位运算(更底层、更快)
if n & 1:  # 如果二进制最后一位是 1,则是奇数

原理解析:
二进制数中,只有最后一项是 ,其余项()全是偶数。所以,一个数是奇是偶,全看二进制最后一位

  • 5 的二进制是 101 最后一位是 1(奇数)
  • 4 的二进制是 100 最后一位是 0(偶数)

2. 过程:十进制转二进制(除 2 取余法)

当我们把十进制转换成二进制时,其实就在不停地做“判断奇偶”和“折半”。

步骤:

  1. 看这个数是奇是偶(n % 2)。
  2. 如果是奇数,记下 1;如果是偶数,记下 0
  3. 把这个数砍掉一半(n //= 2)。
  4. 重复直到数字变成 0。

3. 核心:快速幂中的 Python 代码解释

现在我们看快速幂里的那段关键代码,你会发现它其实是在一边把 转成二进制,一边计算结果

while n > 0:
    # 1. 判断奇偶 (对应二进制的这一位是否为 1)
    if n % 2 == 1:      # 或者写成 if n & 1:
        result *= current_product
    
    # 2. 权重升级 (每一位对应的权值是平方增长)
    current_product *= current_product
    
    # 3. 折半 (对应二进制向右移一位)
    n //= 2             # 或者写成 n >>= 1

为什么“判断奇数”这么重要?

以计算 为例,十进制 的二进制是 1101

  • 第一轮 (, 奇数):二进制最后一位是 1。我们需要 ,把它乘进 result
  • 第二轮 (, 偶数):二进制倒数第二位是 0。我们跳过,不乘进 result
  • 第三轮 (, 奇数):二进制倒数第三位是 1。我们需要 ,把它乘进 result
  • 第四轮 (, 奇数):二进制倒数第四位是 1。我们需要 ,把它乘进 result

最终结果:


💡 记忆秘诀:三个动作的联动

我们可以把这三个 Python 语句看作一个自动化工厂

  1. n % 2 == 1:是质检员。他检查当前这一位是否需要“拿货”(乘入结果)。
  2. current_product *= current_product:是生产线。它不管你要不要货,每过一轮都在疯狂翻倍()。
  3. n //= 2:是进度表。每处理完一位,就把数字砍掉一半,直到全部处理完。

总结

  • n % 2 就像是在问:“当前的 还有零头(奇数位)吗?”
  • n // 2 就像是在说:“好,这一位我看过了,我们看下一位吧。”
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐