寻找数字的素因子

时间:2014-07-16 16:07:17

标签: python prime-factoring

我正试图找到13195的最大素数因子:

def problem3():
    divisors = []
    primes = []
    num = 13195
    for a in range(2, num):
        if num % a == 0:
            divisors.append(a)
    print divisors #This is the list of all divisors of the number
    // At this point divisors looks like:
    // [5, 7, 13, 29, 35, 65, 91, 145, 203, 377, 455, 1015, 1885, 2639]

    print ""
    primes = divisors
    for elements in divisors:
        for a in range(2,elements):
            if elements % a == 0:
                primes.remove(elements)
                print divisors
                break
    print primes

这是我得到的输出:

[5, 7, 13, 29, 65, 145, 377, 1015, 2639]

因此它适用于前四个素数,但一旦它开始删除不是素数的数字,代码似乎跳过检查除数列表中的下一个元素,并继续前进。为什么这样做?

3 个答案:

答案 0 :(得分:3)

重要的一点是:

primes = divisors

这不会复制列表 - primesdivisors

的列表相同

所以当你这样做时

primes.remove(elements)

与以下内容相同:

divisors.remove(elements)

通过元素扰乱迭代,这就是它似乎跳过的原因。

答案 1 :(得分:0)

它正在跳过下一个元素,因为一旦删除了一个元素,每个后续元素的索引就会减少一个。我会尝试在a

之后递减primes.remove(elements)

答案 2 :(得分:0)

问题是您要从列表中删除同时进行迭代的元素。它将打破迭代。

你可以改为

for elements in divisors:
    isPrime = True
    for a in range(2,int(math.sqrt(elements) + 1)):
        if elements % a == 0:
            isPrime = False
            break
    if isPrime:
        primes.append(elements)
print primes