2017-10-04 64 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

供您使用输入你想检查的数字作为功能的输入,并检查它是否在列表中 –