【发布时间】:2021-04-26 05:08:53
【问题描述】:
我编写了一个函数,它返回给定整数的质因子。对于我测试的案例,它似乎工作正常。这是原始函数。
def prime_factors_2(num: int) -> set:
factors = []
while num % 2 == 0:
factors.append(2)
num //= 2
i = 3
while i <= int(sqrt(num)) + 1:
if num % i == 0:
factors.append(i)
num //= i
else:
i += 2
if num != 1:
factors.append(num)
return set(factors)
# num = 867844
# Output = {601, 2, 19}
在弄乱代码的同时,我尝试实现相同的功能,但使用 for 循环而不是 while 循环(因为在涉及计数时我更喜欢使用 for 循环)。这是第二个函数的代码。
def prime_factors_1(num: int) -> set:
factors = []
while num % 2 == 0:
factors.append(2)
num //= 2
for i in range(3, int(sqrt(num)) + 1, 2):
if num % i == 0:
factors.append(i)
num //= i
print(num)
if num != 1:
factors.append(num)
return set(factors)
# num = 867844
# Output = {2, 19, 11419}
由于某种原因,它不再将 11419 分解为 601 和 19。这两个循环不相等吗?还是我在将 while 循环转换为 for 循环时犯了一些错误?我知道在这种情况下这两个循环之间没有实际区别,但出于好奇,我想知道这一点。
【问题讨论】:
标签: python-3.x for-loop while-loop