从给定的整数中查找素数除数

时间:2016-03-07 02:59:40

标签: python function prime-factoring

我必须找到给定整数的所有除数,并且从所有这些除数中我必须找到素数并将它们放在从最低到最高的列表中。

这是我到目前为止所做的:

def prime_divisors(n): 
    j = 2
    list1 = []
    prime_list = []
    for i in range(2,n+1):
            if n%i == 0:
                if i==2 or i==3:
                    prime_list.append(i)
                elif i%j == 0:
                    for j in range(2,n+1,2):
                        list1.append(j)
            elif n%2 == 1 or n%3 == 1:
                prime_list.append(n)
                return prime_list
    return prime_list
prime_divisors(12)    

2 个答案:

答案 0 :(得分:0)

检查除数是否为素数的测试不正确。该错误似乎位于elif i%j == 0:部分。另外,list1会发生什么?

链接是有关素数测试的问题:answer1 answer2。我下面选择的那个可能不是最有效的,但有效。

from math import sqrt; from itertools import count, islice    
def is_prime(n):
    return n > 1 and all(n%i for i in islice(count(2), int(sqrt(n)-1)))

def prime_divisors(n): 
    prime_list = []
    search_list = range(2, n/2 +1) # search only to n/2
    search_list.append(n) # also check n 

    for i in search_list:
        if n%i == 0:
        # i has been found to evenly divide input number n
        # now determine if it is prime
            if is_prime(i):
                prime_list.append(i)
    return prime_list

答案 1 :(得分:0)

你可以用这个:

def prime_divisors(n):  
prime_list = []
if n%2==0:
    prime_list.append(2)
for i in range(3,n):
    if n%i==0:          
        for j in range(2,i):
            if i%j==0:
                break
            if j<i-1:
                continue
            prime_list.append(i)
if len(prime_list)==0:
    prime_list.append(n)
return prime_list

有效输入只是大于1的整数,效率非常低。