2017-10-04 65 views
0

我創建了以下腳本的主要因素,找出了許多的主要因素:我不知道這是否是做的最好的和有效的方式邏輯找出一些

def check_if_no_is_prime(n): 
    if n <= 3: 
     return True 
    else: 
     limit = int(math.sqrt(n)) 
     for i in range(2,limit + 1): 
      if n % i == 0: 
       return False 
     return True 


def find_prime_factors(x): 
    prime_factors = [] 
    if check_if_no_is_prime(x): 
     prime_factors.append(1) 
     prime_factors.append(x) 
    else: 
     while x % 2 == 0 and x > 1: 
      prime_factors.append(2) 
      x = x // 2 
     for i in range(3,x+1,2): 
      while x % i == 0 and x > 1: 
       if check_if_no_is_prime(i): 
        prime_factors.append(i) 
        x = x // i 
       if x <= 1: 
        return prime_factors 
     return prime_factors 

no = int(input()) 
check = find_prime_factors(no) 
print (check) 

這個 ? 有人可以指出任何更好的方法來做到這一點?

+0

退房http://codereview.stackexchange.com有噸的例子。 –

+1

我投票結束這個問題作爲題外話,因爲它是一個代碼審查網站重複。 –

+0

這絕對是錯誤的,因爲1不是素數。 – noel

回答

0

使用erathnostanes的篩得到所有質數從2到任何限制輸入

def sieve(N): 
     from math import floor,sqrt 
     A=[1 for x in range(N+1)] 
     for count in range(2): 
      A[count]=0 
     for i in range(floor(sqrt(N))+1): 
      if A[i]==1: 
       for k in range(i*i,N+1,i): 
        A[k]=0 
     ans=list(enumerate(A)) 
     res=[] 
     for (i,j) in ans: 
      if j==1: 
       res+=[i] 
     return res 
    print(sieve(100)) 
    #my code 
+0

供您使用輸入你想檢查的數字作爲功能的輸入,並檢查它是否在列表中 –