如何修复素数检查/分解功能

时间:2019-02-12 10:35:57

标签: python

我正在玩耍学习python。我想创建一个模块来检查素数并分解给定的数字。但是导入模块会导致因素在我运行代码时出现的频率很高。 当我像3次运行导入的函数时,我得到的结果是:“ 60不是素数。它的因子是:[2、2、3、5、2、2、3、5、2、2、3、5]”

我认为问题在于我在函数之前定义了数组prime_factors。 当我尝试将数组放入函数中时,它仅给出:“ x不是质数。它的因子是[]”,其中x是我要检查的数字。

prime_factors=[]

def factorize(x):
    i=2  
    while i <= x:
        if x%i==0:
            x=x/i
            prime_factors.append(i)
        else:
            i+=1


def prime_check(x):
    import numpy as np
    factorize(x)
    if np.size(prime_factors)==1:
        print(str(x)+" is prime.")
    else:
        print(str(x)+" is not prime. Its factors are: "+str(prime_factors))

我只是想要输出,例如:“ 60不是素数。它的因子是:[2,2,3,5]”。

1 个答案:

答案 0 :(得分:0)

是的,没错。这将起作用(为清晰起见,可以进行一些间距编辑):

def factorize(x):
    prime_factors = []
    i = 2  
    while i <= x:
        if x % i == 0:
            x /= i
            prime_factors.append(i)
        else:
            i += 1
    return prime_factors

作为一般原则,除非有充分的理由,否则您的函数不应在其范围之外修改变量。最好是返回一些东西,而不是修改全局变量。