Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python查找素因子_Python - Fatal编程技术网

如何使用python查找素因子

如何使用python查找素因子,python,Python,我需要找到给定数的素数因子 首先,我编写了代码来查找给定数字的因子,并将其存储为列表,并尝试在列表中循环查看当前数字是否为素数。然而,由于is_素数函数中的一个参数未定义,我得到了一个错误 下面是编写的代码。 有人能帮助我们理解如何使用下面的代码找到主要因素吗 def factors(num): factor=[] for i in range(2,num+1): if num%i==0: factor.append(i) return factor num=i

我需要找到给定数的素数因子

首先,我编写了代码来查找给定数字的因子,并将其存储为列表,并尝试在列表中循环查看当前数字是否为素数。然而,由于is_素数函数中的一个参数未定义,我得到了一个错误

下面是编写的代码。 有人能帮助我们理解如何使用下面的代码找到主要因素吗

def factors(num):
  factor=[]
  for i in range(2,num+1):
    if num%i==0:
      factor.append(i)
  return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

def is_prime(factor):
  for n in factor:
    for i in range(2,n):
      if n%i==0:
        return False
    return True

Prime_factors=[]
prime=is_prime(factor)

if prime:
  prime_factors.append(n)

print(Prime_factors)

我得到的唯一错误是factor不是有效变量,这是真的,因为它仅在factors()函数中定义,因此只能在函数范围中访问

此外,您可以利用第一个函数来确定数字是否为素数。 试试这个:

import math

def factors(num):
  factor=[]
  for i in range(1, math.isqrt(num)+1):
    if num % i == 0:
      factor.append(i)
      if i != num//i:
        factor.append(num//i)
  return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

def is_prime(factor):
  if len(factors(factor)) == 2 and factor != 1:
      return True
  else:
      return False


prime_factors=[]

for i in number:
    if is_prime(i):
      prime_factors.append(i)

print(prime_factors)

我得到的唯一错误是factor不是有效变量,这是真的,因为它仅在factors()函数中定义,因此只能在函数范围中访问

此外,您可以利用第一个函数来确定数字是否为素数。 试试这个:

import math

def factors(num):
  factor=[]
  for i in range(1, math.isqrt(num)+1):
    if num % i == 0:
      factor.append(i)
      if i != num//i:
        factor.append(num//i)
  return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

def is_prime(factor):
  if len(factors(factor)) == 2 and factor != 1:
      return True
  else:
      return False


prime_factors=[]

for i in number:
    if is_prime(i):
      prime_factors.append(i)

print(prime_factors)

您的代码中有一些语法和逻辑错误,我已经编辑了代码,删除了未定义的
因子
,并将for loop out从方法is_prime中移出以使其有意义。代码如下:

def factors(num):
   factor=[]
   for i in range(2,num+1):
    if num%i==0:
     factor.append(i)
    return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

def is_prime(n):
  for i in range(2,n):
    if n%i==0:
      return False
    return True

Prime_factors=[]

for n in number:
  if is_prime(n):
   Prime_factors.append(n)

print(Prime_factors)

您的代码中有一些语法和逻辑错误,我已经编辑了代码,删除了未定义的
因子
,并将for loop out从方法is_prime中移出以使其有意义。代码如下:

def factors(num):
   factor=[]
   for i in range(2,num+1):
    if num%i==0:
     factor.append(i)
    return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

def is_prime(n):
  for i in range(2,n):
    if n%i==0:
      return False
    return True

Prime_factors=[]

for n in number:
  if is_prime(n):
   Prime_factors.append(n)

print(Prime_factors)

您需要找到所有因子,然后选择这些因子是否为素数。您可以先构建因子数组,然后从该数组中选择素数,如下所示:

import math

def factors(num):
  factor=[]
  for i in range(2,num+1):
    if num%i==0:
      factor.append(i)
  return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

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

Prime_factors=[]

for n in number:
  if is_prime(n):
   Prime_factors.append(n)

print("Prime factors are: ",Prime_factors)
输出:

Enter your number: 56
Factors for 56 are:  [2, 4, 7, 8, 14, 28, 56]
Prime factors are:  [2, 7]
通过只检查主数字的平方根来节省计算时间

或者,您可以节省一点计算并在一个循环中进行,另外,您可以通过开始检查数字是否为素数,如果为素数,则无需检查其他因素,如果不是素数,则只需检查其值的一半:

import math

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

def factors(num):
  factor=[]
  if is_prime(num):
    factor.append(num)
  else:
    for i in range(2,int((num+1)/2)):
      if num%i==0 and is_prime(i):
        factor.append(i)
  return factor

num=int(input("Enter your number: "))

factors=factors(num)

print("Prime factors are: ",factors)
现在输出为:

Enter your number: 17
Prime factors are:  [17]
Enter your number: 116
Prime factors are:  [2, 29]

您需要找到所有因子,然后选择这些因子是否为素数。您可以先构建因子数组,然后从该数组中选择素数,如下所示:

import math

def factors(num):
  factor=[]
  for i in range(2,num+1):
    if num%i==0:
      factor.append(i)
  return factor

num=int(input("Enter your number: "))

number=factors(num)

print("Factors for", num, "are: ", number)

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

Prime_factors=[]

for n in number:
  if is_prime(n):
   Prime_factors.append(n)

print("Prime factors are: ",Prime_factors)
输出:

Enter your number: 56
Factors for 56 are:  [2, 4, 7, 8, 14, 28, 56]
Prime factors are:  [2, 7]
通过只检查主数字的平方根来节省计算时间

或者,您可以节省一点计算并在一个循环中进行,另外,您可以通过开始检查数字是否为素数,如果为素数,则无需检查其他因素,如果不是素数,则只需检查其值的一半:

import math

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

def factors(num):
  factor=[]
  if is_prime(num):
    factor.append(num)
  else:
    for i in range(2,int((num+1)/2)):
      if num%i==0 and is_prime(i):
        factor.append(i)
  return factor

num=int(input("Enter your number: "))

factors=factors(num)

print("Prime factors are: ",factors)
现在输出为:

Enter your number: 17
Prime factors are:  [17]
Enter your number: 116
Prime factors are:  [2, 29]