再次迭代,素数因子循环,python

时间:2016-07-01 16:18:42

标签: python loops python-3.x primes

我最近在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中删除任何数字,当除以任何数字时,其余数字为0.

所以,基本上,我只是想把我现在的列表,在我附加它之后,然后将列表中的每个值除以每个数字,直到这个数字,以确保它不是't'可以被剩余的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整除...

2 个答案:

答案 0 :(得分:1)

修改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

现在,n%x == 0的情况是,它会从原始数字中删除某些因子的幂。

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

答案 1 :(得分:0)

您可以简单地使用一个为素数返回True / False的函数

import math
def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))

def prime_factors(n):
    L = []
    i = range(1, n+1)
    for x in i:
        if n % x == 0:
            if is_prime(x):
                L.append(x)
    return L