初学者素数因子分解

时间:2015-05-04 21:49:36

标签: python primes factors

我写了一个初学者计划,旨在找到并打印任何数字的素因子:

def is_prime(n):
    if n == 3:
        return True
    elif n == 4:
        return False
    else:
        n = int(n**0.5)+1
        for i in range(2,n):
            if n % i == 0:
                return False
        return True

def prime_factors(n):
    for i in range(2,n):
        if n % i == 0:
            x = i
            primes.append(x)
            y = n / x
            return y
            break


primes = []

def main(y):
    while not is_prime(y):
        y = prime_factors(y)
    primes.append(y)
    print(primes)

这是程序运行的例子,让我感到困惑:

main(625)

[5, 5, 5, 5]

...

main(160)

[160]

...

main(6)

[6]

...

main(1007)

TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'

有些投入有效,有些则没有。我无法弄清楚为什么。我也无法弄清楚如何解决这个错误。请帮忙。谢谢。

2 个答案:

答案 0 :(得分:5)

您的is_prime函数似乎错误地在这些行中重用变量n

    n = int(n**0.5)+1
    for i in range(2,n):
        if n % i == 0:

您可以考虑使用更具描述性的名称,例如factor_limit

答案 1 :(得分:0)

你有很多问题,这里有一些最引人注目的问题

<强> 1 TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'

告诉你python不知道如何None**0.5

2。正如在另一个answer中所提到的那样,你正在检查n的平方根是否可以被i分割,如果N可以被i整除,那么

第3

def prime_factors(n):
    for i in range(2,n):
        if n % i == 0:
            x = i
            primes.append(x)
            y = n / x
            return y
            break #<--- this is totally worthless and does nothing
    #if you get here you are returning None... which breaks(see #1)
    return [1] #might fix your problem ... 

可能还有其他一些问题