我正在使用Python书籍(初学者)练习,并且我在其中一个练习中遇到了麻烦。
练习:修改此生成器,使其按递增顺序报告因子,同时保持其一般性能优势(=仅测试值的平方根)。
def factors(n):
k = 1
while k*k < n:
if n%k == 0:
yield k
yield n // k
k += 1
if k*k == n:
yield k
有人能指出我正确的方向吗?
编辑:在我从NPE得到答案后,我将代码更改为:
def factors(n):
k = 1
temp = []
while k*k < n:
if n%k == 0:
yield k
temp.append(n // k)
k += 1
if k*k == n:
yield k
for i in reversed(temp):
yield i
这很有用。
答案 0 :(得分:1)
除n // k
外,这些因素已经按递增顺序生成。
而不是立即屈服n // k
,你可以记住这些因素并最终屈服于它们。