2012-07-26 47 views
1

此代碼工作正常。說1980年它給出的結果2^2 * 3^2 * 5^1 * 7^0 * 11^1 *(一個額外的星號保留在最後,我可以刪除它,這與我無關。問題 的代碼是:分解python

prime=[2,3,5] 
f=7 
def next_prime(f): 
    j=0 
    while j==0: 
     for x in prime: 
      if f%x==0: 
       f+=2 
       break 
     else: 
      j=1 
    return f; 
def factorization(n): 
    list=[2,3,5] 
    power=[] 
    x=0 
    while x<len(list): 
     j=0 
     while n%list[x]==0: 
      j+=1 
      n=n/list[x] 
     power.append(j) 
     x+=1 
    if n!=1: 
     while n!=1: 
      g=next_prime(f) 
      j=0 
      while n%g==0: 
       j+=1 
       n=n/g 
      else: 
       power.append(j) 
       prime.append(g) 
    x=0 
    while x<len(power): 
     print(prime[x],"^",power[x],"*",end="") 
     x+=1 

factorization(1980) 

然後如果我想從結果中刪除術語7^0因此所有這些具有功率爲零的素數,我如果j由在管線31(變化!= 0:而不是否則:)。然後代碼不工作。它適用於像13860這樣的數字,其中沒有像1980年那樣的數字,沒有數字的零點。我找不到問題! 改變的代碼是:

prime=[2,3,5] 
f=7 
def next_prime(f): 
    j=0 
    while j==0: 
     for x in prime: 
      if f%x==0: 
       f+=2 
       break 
     else: 
      j=1 
    return f; 
def factorization(n): 
    list=[2,3,5] 
    power=[] 
    x=0 
    while x<len(list): 
     j=0 
     while n%list[x]==0: 
      j+=1 
      n=n/list[x] 
     power.append(j) 
     x+=1 
    if n!=1: 
     while n!=1: 
      g=next_prime(f) 
      j=0 
      while n%g==0: 
       j+=1 
       n=n/g 
      if j!=0: 
       power.append(j) 
       prime.append(g) 
    x=0 
    while x<len(power): 
     print(prime[x],"^",power[x],"*",end="") 
     x+=1 

factorization(1980) 
+2

'list'是變量名的錯誤選擇。它會隱藏內置的'list'類型名稱。 – 2012-07-26 08:18:44

+0

okk ..我有我的prblm .. thx! – 2012-07-26 08:31:18

回答

2

我的天堂」 t分析了你的邏輯,但是你錯誤地使用了else子句。 while .. else只有在while內撥打break纔有意義。在您的第一個代碼示例中,始終執行else分支。

作爲例子,即使下面的代碼將運行else分支:

while False: 
    print 'while' 
else: 
    print 'else' 
+0

okk ..我有我的prblm .. thx! – 2012-07-26 08:31:38

1

如果你只在獲取大量的首要因素,有興趣的可以試試:

def primefactors(x): 
    factorlist=[] 
    loop=2 
    while loop<=x: 
     if x%loop==0: 
      x/=loop 
      factorlist.append(loop) 
     else: 
      loop+=1 
    return factorlist 

例如:

primefactors(1980) 
[2, 2, 3, 3, 5, 11] 
primefactors(13860) 
[2, 2, 3, 3, 5, 7, 11] 
0

要添加到IMSC的回答, 有實際上是使用循環= 6和環路算法+ = 6,然後嘗試環+ 1和循環1,運行好一點。 2 & 3必須先手動嘗試。