【发布时间】:2016-07-01 16:18:42
【问题描述】:
我最近在 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。
所以,本质上,我只想获取我现在拥有的列表,在我添加它之后,然后将列表中的每个值除以每个数字,直到那个数字,以确保它不能被任何东西整除余数为 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
另外,我尝试将它分成 2 个不同的功能...
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整除...
【问题讨论】:
-
因子列表的初始代码可以使用更短的循环。每次你找到一个因子
x,你也找到了第二个因子n / x。您可以将两者都添加到列表中。这将循环的上限减半。如果您希望这些因素按顺序排列,请在最后对列表进行排序。
标签: python loops python-3.x primes