在python中使用“for loop”查找数字的素因子

时间:2018-06-02 08:55:00

标签: 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)
                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)

1 个答案:

答案 0 :(得分:1)

你的问题是算法,而不是Python代码。如果x(i> 1)除a,则在x**i除以a时,您的程序会增加除数a。在您的输出中,最后一个数字表示所有素数的乘积,这些乘数不止一次是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 的除数。您可以使用PythonTutor之类的调试器来查找您的程序不在哪里,您期望什么。

实际上,我只是想给你一个伪代码来改进你的算法,所以你可以实现这个算法。但后来我注意到,Python中的伪代码几乎相同:

{{1}}

现在,您可以尝试提高算法的效率,因为这种策略相当慢。