2016-03-07 26 views
1

我從這樣做得到的唯一問題是,該程序打印一個列表 ,顯示,如n = 11,最終結果將打印[2,2 ,3],當我只想要[11]。對於大多數測試來說,這也是如此,它會有我需要的數字,但也有額外的數字。問題與最終名單打印獲得一個數字的主要因數

Base = 2 
    divisors = [ ] 
    while n > 1: 
     if n % Base == 0: 
      divisors.append(Base) 
      n = (n/Base) 
     else: 
      Base += 1 + Base % 2 
    return (divisors) 
+0

看看[臺](HTTPS ://docs.python.org/3.5/tutorial/datastructures.html?highlight = data%20structures#sets)如果你唯一的問題是你只需要唯一的值 – JGreenwell

回答

1

你只需要確保除數以前沒有在您的if語句中使用:

def prime_divisors(n): 
    ns = 2 
    divisors = [ ] 
    while n > 1: 
     if n % ns == 0 and n not in divisors: 
      divisors.append(ns) 
      n = (n/ns) 
     else: 
      ns += 1 + ns % 2 # 2 -> 3, odd -> odd + 2 
    return (divisors) 
0

如果你想從你的「公約數」列表中刪除重複的元素, 可以使用一個這樣的功能。 這裏list2是另一個最初是空的列表。

for i in divisors: 
    if i not in list2: 
     list2.append(x) 
0

我建議改變的邏輯在那裏你把n通過ns消除ns所有因素,而不僅僅是一次一個。然後,因爲你永遠需要在頂層重複的ns值,可以使else塊無條件的(這額外位是沒有必要的,剛剛好):

def prime_divisors(n): 
    ns = 2 
    divisors = [] 
    while n > 1: 
     if n % ns == 0: 
      divisors.append(ns) 
      while n % ns == 0:    # add this loop, to avoid duplicated factors 
       n = (n/ns) 
     ns += 1 + ns % 2 # 2 -> 3, odd -> odd + 2 # this can be run unconditionally 
    return (divisors) 
+0

真棒,這正是我需要的!謝謝 – Cha04F