2017-03-17 44 views
1

我做的pyschools做法,我在主題問題5問題12 - 質因子分解,我不得不這樣做:Pyschools因式分解

給定一個正整數,寫,計算的主要因素的函數可以將它們疊加在一起以獲取相同的整數。

Examples 

    >>> primeFactorization(60) 
    [2, 2, 3, 5] 
    >>> primeFactorization(1050) 
    [2, 3, 5, 5, 7] 
    >>> primeFactorization(1) 
    [] 

這是我的代碼:

import operator 
import functools as fun 

def primeFactorization(num): 
    num = num 
    primes = [] 
    result = [] 
    if num > 1: 
     [primes.append(x) for x in range(2, num) if all(x % y != 0 for y in range(2, x))] 
    multy = fun.reduce(operator.mul, result, 1) 
    for number in primes: 
     if num % number == 0 and multy != num: 
      result.append(number) 
    return result 

它返回我:

Test Cases    Expected Result Returned Result 
primeFactorization(33) [3, 11]   [3, 11] 
primeFactorization(84) [2, 2, 3, 7]  [2, 3, 7]  
primeFactorization(1) []     [] 

我tryed這一點,我得到私人測試用例失敗:

import operator 
import functools as fun 

def primeFactorization(num): 
    num = num 
    primes = [] 
    result = [] 
    if num > 1: 
     [primes.append(x) for x in range(2, num) if all(x % y != 0 for y in range(2, x))] 
    multy = fun.reduce(operator.mul, result, 1) 
    for number in primes: 
     if num % number == 0: 
      result.append(number) 

    multy = fun.reduce(operator.mul, result, 1) 
    y = num/multy 
    if y != 1 and y in primes: 
     result.insert(0, int(y)) 
    return result 

Test Cases    Expected Result Returned Result 
primeFactorization(33) [3, 11]   [3, 11] 
primeFactorization(84) [2, 2, 3, 7] [2, 2, 3, 7]  
Private Test Cases  Passed   Failed 
primeFactorization(1) []    [] 

我該怎麼做才能通過?

回答

2

爲什麼這麼複雜? 查找給定數字X的所有素數因子的問題與查找我們可以將X分成的最小數字集合(大於1)相同。 爲了解決這個問題,我們可以從找到n的最小數字開始。 這是X的第一個主要因素。然後,我們可以通過尋找X/n

def primeFactorization(X): 

    possible = [2] + range(3,int(ceil(sqrt(X)))+1,2) 

    for p in possible: 
     if X % p == 0: 
      return [p] + primeFactorization(X/p) 

    return [X] 


primeFactorization(3*3*7*5*11*13*31) 

> [3,3,5,7,11,13,31] 
+0

好嗎首要因素髮現的主要因素的其餘部分,它的工作,唯一的事情是primeFactorization(1)[] [1]這是我做的,如果和它的工作,好工作謝謝你:) –