【小白笔记】在 Python 中,判断奇偶数与折半
·
在 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 取余法)
当我们把十进制转换成二进制时,其实就在不停地做“判断奇偶”和“折半”。
步骤:
- 看这个数是奇是偶(
n % 2)。 - 如果是奇数,记下
1;如果是偶数,记下0。 - 把这个数砍掉一半(
n //= 2)。 - 重复直到数字变成 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 语句看作一个自动化工厂:
n % 2 == 1:是质检员。他检查当前这一位是否需要“拿货”(乘入结果)。current_product *= current_product:是生产线。它不管你要不要货,每过一轮都在疯狂翻倍()。n //= 2:是进度表。每处理完一位,就把数字砍掉一半,直到全部处理完。
总结
n % 2就像是在问:“当前的 还有零头(奇数位)吗?”n // 2就像是在说:“好,这一位我看过了,我们看下一位吧。”
更多推荐
所有评论(0)