2014-07-16 52 views
3

我試圖找到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

的重要行是:

primes = divisors 

這不會複製名單 - primes是相同的列表爲divisors

所以,當你做

primes.remove(elements) 

這是一樣的:

divisors.remove(elements) 

混淆了元素的迭代,這就是爲什麼它跳過了。

+0

謝謝! 工作完美! – Mburdzy

0

它跳過下一個元素,因爲一旦刪除了一個元素,每個後面的元素的索引就會減少一個。我會嘗試在primes.remove(elements)之後遞減a

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