0

以下に、素因数分解のコードを添付しましたが、機能します。出力をより明確にする方法があるかどうか疑問に思っていました。リストに素因数を追加しますが、再帰の最後の最後のリストにはリストのリストが含まれていますが、数字のリストだけが必要です。

def prime_factor(n):
    list = [] 
    if prime(n)==1:
        list.append(n)
        return list
    else:
        for i in range(2,n):
            if n %i ==0:
                a =prime_factor(i)
                b = prime_factor(n/i)
                list.extend(a)
                list.extend(b)
                return list

def prime(n):
    if n ==2 or n==3:
        return 1
    if n==1:
        return 0
    for i in range(2,n):
        if n%i ==0:
            return 0
            break
        if i ==n-1:
            return 1
            break
4

1 に答える 1

1

素因数をはるかに簡単に取得できます。

def factorize(n):
    factors = []

    p = 2
    while True:
        while(n % p == 0 and n > 0): #while we can divide by smaller number, do so
            factors.append(p)
            n = n / p
        p += 1  #p is not necessary prime, but n%p == 0 only for prime numbers
        if p > n / p:
            break
    if n > 1:
        factors.append(n)
    return factors

print factorize(32*9*11*13*13)

版画

[2、2、2、2、2、3、3、11、13、13]

ソリューションは次のように改善できます。

def prime_factor(n):
    list = [] 
    if n==1:
        return [1] #or []?
    else:
        for i in range(2,n+1): #additional improvement could be made here
            if n %i ==0:
                b = prime_factor(n/i)
                list.append(i) #i is always prime in here, you return once first i is found
                list.extend(b)
                return list

(あなたdef prime(n):は私を混乱させました、それは必要ありません)

于 2013-02-10T00:02:47.473 に答える