2017-03-17 61 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]这是我做的,如果和它的工作,好工作谢谢你:) –