2013-11-24 21 views
0

我試圖找到數705561475143.Python的 - 素數典

在我的代碼,功能primeFactor()搜索某一整數的所有因素,它們插入到函數Prime()的一個主要因素,它將數字更改爲0或根本不更改。如果該數字未更改爲0,則該數字應該添加到列表中。

import math 


def Prime(n): 
    isPrime = False 
    r = range(2, int(math.sqrt(n)+5)) 
    a = 1 
    for b in r: 
     if r[a] >= int(math.sqrt(n)+2): 
      break 
     elif n % r[a] != 0: 
      a += 1 
     elif n % r[a] == 0 & n != r[a] & n != 1: 
      n = 0 
      break 

def primeFactor(m): 
    l = [] 
    for x in range(1, m+1): 
     if m % x == 0: 
      if Prime(m) != 0: 
       l.append(x) 
    print(l) 

然而,當我輸入

> primeFactor(36) 

我得到

> [1,2,3,4,6,9,12,18,36] 

而不是

> [2,3] 

當我輸入

> primeFactor(705561475143) 

該代碼不能給我一個答案。

回答

4

首先,您爲什麼使用m+1作爲x in range()?請注意,您可能只想使用range(2, m/2, 1) - 請參閱是否可以找出原因。

其次,

if m % x == 0: 
     if Prime(m) != 0: 
      l.append(x) 

如果m通過x整除的話,就不能成爲首相,並呼籲Prime(m)是沒用的。我懷疑你打算通過x作爲論據。 (假設x不是0或== m

第三Prime()從不返回任何東西。這意味着它始終是!= 0

最後,爲了幫助你,我會link you to some of my own answers to this question

+0

謝謝。我試着運行這個,但它不認識一些函數(即primeList)。你還使用了哪些進口產品? – LaPXL8R

+0

@ LaPXL8R - 我故意沒有包含primeList()。然而,我確實花了一個小時左右的時間調整我的代碼,使其更加優化,現在我會更新這篇文章。 –

+0

@ LaPXL8R我已經包含完整的自包含代碼。 –