Python 3.x 用“求一个数的素因子”;for loop";用python
我知道如何使用while循环来实现这一点,但我需要找到使用for循环的解决方案。对于给定的num=56,下面的代码输出Python 3.x 用“求一个数的素因子”;for loop";用python,python-3.x,for-loop,prime-factoring,Python 3.x,For Loop,Prime Factoring,我知道如何使用while循环来实现这一点,但我需要找到使用for循环的解决方案。对于给定的num=56,下面的代码输出[2,7,4],而正确的答案是[2,2,2,7]。我哪里做错了 def prime_fac(num): a = num pf = [] for x in range(2,a): if a % x == 0: if x == 2 or x == 3: pf.append(x)
[2,7,4]
,而正确的答案是[2,2,2,7]
。我哪里做错了
def prime_fac(num):
a = num
pf = []
for x in range(2,a):
if a % x == 0:
if x == 2 or x == 3:
pf.append(x)
a = a//x
else:
for y in range(2,x):
if (x % y) == 0:
break
else:
pf.append(x)
a = a // x
else:
continue
if a>1:
pf.append(a)
print (f"Prime factors of {num} are {pf}")
number = int(input('Enter a number to find its prime factors: '))
prime_fac(number)
你的问题在于算法,而不是Python代码。如果
x**i
(i>1)除以a
,则程序在除数a
时会增加除数x
。在输出中,最后一个数字表示所有素数的乘积,这些素数不止一次是a
的除数。您可以使用调试器来找出您的程序没有找到的地方,以及您的期望
实际上,我只是想给你一些伪代码来改进你的算法,这样你就可以实现这个算法了。但后来我注意到,Python中的伪代码几乎相同:
def prime_fac(num):
a = num
pf = []
#ranges in Python don't include the last element, therefore we need a + 1 to detect also prime numbers
for x in range(2, a + 1):
#check if x is divisor and repeat
while a % x == 0:
pf.append(x)
a = a // x
#all factors found?
if a == 1:
#yes, return list with prime factors
return pf
#no, go to next x
现在,您可以尝试提高算法的效率,因为这种策略相当缓慢