python - 生成器产量因子递增(初学者)

时间:2013-12-07 18:10:45

标签: python

我正在使用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

这很有用。

1 个答案:

答案 0 :(得分:1)

n // k外,这些因素已经按递增顺序生成。

而不是立即屈服n // k,你可以记住这些因素并最终屈服于它们。