我最近在python中创建了一个函数,它将为我提供在python中选择的任何数字的所有因子。我现在想修改它只显示主要因素。我目前的职能是:
def prime_factors(n):
L = []
i = range(1, n+1)
for x in i:
if n % x == 0:
L.append(x)
return L
现在,为了找到素数因子,我想重新遍历L,并从L中删除任何数字,当除以任何数字时,其余数字为0.
所以,基本上,我只是想把我现在的列表,在我附加它之后,然后将列表中的每个值除以每个数字,直到这个数字,以确保它不是't'可以被剩余的0整除。
我试过了:
def prime_factors(n):
L = []
i = range(1, n+1)
for x in i:
if n % x == 0:
L.append(x)
for y in L:
for x in i:
if y % x == 0:
L.remove(y)
return L
另外,我尝试将它分成两个不同的功能......
def prime_factors(n):
L = []
i = range(2, n)
for x in i:
if n % x == 0:
L.append(x)
return L
def prime(n):
L = prime_factors(n)
i = range(2, n)
for y in L:
for x in i:
if x % y == 0:
L.remove(x)
return L
我已经尝试将退货放在不同的地方,我试过翻转循环的顺序,无论如何,我无法弄清楚如何通过另一个检查来运行列表L.看看它中的值是否可以被0整除...
答案 0 :(得分:1)
修改prime_factors函数,如下所示:
def prime_factors(n):
L = []
i = range(2, n+1) # start from 2 as it is the first prime
for x in i:
if n % x == 0:
L.append(x)
# loop added
while n%x == 0:
n = n/x
# break as no further factors are possible
if n == 1:
break
return L
现在,n%x == 0的情况是,它会从原始数字中删除某些因子的幂。
例如,
n = 24 = 2 * 2 * 2 * 3
n%2 == 0,所以L = [2],n变为3 [这确保4或8,非素数不会附加到L]
答案 1 :(得分:0)
您可以简单地使用一个为素数返回True / False的函数
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
def prime_factors(n):
L = []
i = range(1, n+1)
for x in i:
if n % x == 0:
if is_prime(x):
L.append(x)
return L