查找以列表形式返回整数的素数因子的素数因子

2024-10-03 13:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

def prime_factors(n):
    i = 2
    lst = []
    while i <= n:
        if isprime(i):
            lst.append(i)
        i += 1
    return lst
def isprime(n):
    n = isdivisor(n)
    i = 2
    lst = []
    for j in n:
        while i <= j/2:
            if j % i != 0:
                return True
            else:
                return False
            i += 1
def isdivisor(n):
    i = 2
    lst = []
    while i <= n/2:
        if n % i == 0:
            lst.append(i)
        i += 1
    return lst
print prime_factors(15)

首先,我试图找到整型n的除数,并检查除数是否为素数。然而,输出是[10, 14, 15]而不是[3,5]。是因为我不能做作业n = isdivisor(n)还是别的什么


Tags: intrueforreturnifdefelseprime
2条回答

代码中有一些逻辑错误。通过返回除数和素数列表,您在某种程度上使事情变得过于复杂。在prime_factors()中已经有一个循环来遍历从2到n的所有数字。因此,您可以简化isdivisor()isprime()函数:

def isdivisor(i, n):
    return n % i == 0

def isprime(n):
    i = 2
    while i < n:
        if n % i == 0:
            return False
        i += 1
    return True

然后在prime_factors()中更改主循环,如下所示:

def prime_factors(n):
    i = 2
    lst = []
    while i < n:
        if isdivisor(i, n) and isprime(i):
            lst.append(i)
        i += 1
    return lst

输出:

>>>prime_factors(15)
[3,5]

我只是写了一段代码来做这件事,没有使用libs。我希望它能帮助你


我的代码:

def get_square_root(n):
  """Return square root of n."""
  return n ** (1.0 / 2)


def is_divisor(n, d):
  """Return True if n divides d, False otherwise."""
  return n % d == 0


def is_prime(n):
  """Return True if n is prime, False otherwise."""
  limit = int(get_square_root(n))
  for i in range(2, limit+1):
    if is_divisor(n, i):
      return False
  return True


def get_prime_factors(n):
  """Return a list of the prime factors of n."""
  prime_factors = []
  for i in range(2, n):
    if is_divisor(n, i) and is_prime(i):
      prime_factors.append(i)
  return prime_factors


if __name__ == '__main__':
  n = 15  # Change n to test 
  prime_factors = get_prime_factors(n)
  print(prime_factors)

输出:

[3, 5]

相关问题 更多 >