2017-03-17 8 views
1

5質問12は私がpyschools慣行をやっていると私は、トピックで問題を抱えています同じ整数を返すために複数に掛け合わせることができます。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) []     [] 

に失敗しました:

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の最初の素因数です。私たちは、その後、それが働いていた、唯一のことはprimeFactorizationは、それが働いていた場合(1)[] [1]これは私が作った、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

大丈夫の素因数を見つけることによって、素因数の残りの部分を見つけることができます良い仕事ありがとう:) –

関連する問題