gpt4 book ai didi

python - 再次迭代,质因数循环,python

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:09 25 4
gpt4 key购买 nike

我最近在 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 中删除任何数字,当 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

此外,我尝试将其分成两个不同的函数......

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 整除...

最佳答案

按如下方式修改 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

现在, while n%x == 0 的作用是,它从原始数字中删除某个因子的幂。

例如,
n = 24 = 2*2*2*3n%2 == 0,因此 L = [2] 并且 n 变为 3 [这确保非素数 4 或 8 不会附加到 L]

关于python - 再次迭代,质因数循环,python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com