2016-09-21 71 views
-3

所以我的程序應該找到一個整數的主要因素,然後打印出整數數組的內容,並且數組中的值應該相乘(給出原始數字) this是什麼是應該看起來像素因分解

質因子分解方案

Enter an integer > 1: 210 

Prime Factors 
2 
3 
5 
7 
Check Product = 210 

這是我的代碼和我的結果

def main(): 
    a = [0]*20 
    print("Prime Factorization Program") 
    print() 
    num = eval(input("Enter an integer > 1: ")) 
    count = 0 
    for k in range(1,num): 
     if num % k == 0: 
      a[count]= k 
      count = count + 1 

    mySum = 0 
    for k in range(count): 
     mySum = mySum + a[k] 
    print() 
    print("Prime Factors") 
    for k in range(count): 
     print(a[k]) 
    print("Check Product =",mySum) 

main() 

這裏是我的結果

質因子分解方案

Enter an integer > 1: 210 

Prime Factors 
1 
2 
3 
5 
6 
7 
10 
14 
15 
21 
30 
35 
42 
70 
105 
Check Product = 366 
+1

爲什麼你認爲乘以一個數字的所有因素會返回數字? –

+2

您需要找到** prime **因素,而不是所有因素。 – karakfa

+0

'if num%k == 0:'你覺得'k'是素數?' – njzk2

回答

0

因爲你的代碼是打印所有因素,而不只是主要因素。下面是您可以參考的因式分解樣本功能:

def prime_factors(n): 
    prim_facs = [] 
    d = 2 
    while d*d <= n: 
     while (n % d) == 0: 
      prim_facs.append(d) 
      n //= d 
     d += 1 
    if n > 1: 
     prim_facs.append(n) 
    return prim_facs 

# Sample Example 
# >>> prime_factors(210) 
# [2, 3, 5, 7] 
+0

該程序將不會運行 –

+0

我驗證了它,它爲我工作。你能解釋我爲什麼提到這個嗎? –

+0

@MattPoretsky如果你不打電話的功能,當然它不會運行... – Copperfield

1
  1. 問題 - 如果˚F是一個因素,你不想來算的倍數˚F
    解決方案 - 一旦你確定一個因素˚F,分ñ通過˚F
    示例 - 210可以被2整除;除以2,然後處理105.這可以確保你不會再計算像6或10這樣的2的倍數。105可以被3整除;除以3並繼續35.

  2. 問題 - 主要因素可以多次顯示。 12 = 2×2×3。
    解決方案 - 如果˚F是一個因素,不斷檢查,並通過將˚F直到你已經佔了所有出現。
    例子 - 12可以被2整除;除以2得到6. 6仍然可以被2除盡;再除以2得到3. 3不能被2整除;繼續下一個因素。