我必须找到给定整数的所有除数,并且从所有这些除数中我必须找到素数并将它们放在从最低到最高的列表中。
这是我到目前为止所做的:
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)
答案 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的整数,效率非常低。