簡體   English   中英

如何使用python查找素數

[英]how to find Prime factors using python

我需要找到給定數字的質因數。

首先,我編寫了代碼來查找給定數字的因數並存儲為列表,如果當前數字是否為質數,我會嘗試遍歷列表。 但是,我收到錯誤,因為 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(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 不是有效變量,這是正確的,因為它僅在 factor() 函數中定義,因此只能在函數范圍內訪問。

此外,您可以利用第一個函數來確定數字是否為質數。 嘗試這個:

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刪除為未定義並將 for 循環從方法 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)

您需要找到所有因素,然后選擇這些因素是否為素數。 您可以先構建 factor 數組,然后從該數組中選擇素數,如下所示:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM