簡體   English   中英

在python中計算素因數

[英]Compute prime factors in python

我目前有一個包含數字的列表:

lst = [3,4,6]

我正在嘗試計算列表中數字的素因數,在那里我獲得了

3^1
2^2
2^1 x 3^1

這是我嘗試過的:

def prime_factors(lst):
   for j in range(len(lst)):
       i = 2
       factors = []
       while i*i <= j:
           if j%i:
               i+=1
           else:
               j//= i
               factors.append(i)
       if j > 1:
           factors.append(j)
  return factors

但我得到 [2] 作為輸出。 將不勝感激在這方面的一些幫助。

好吧,我從頭開始,它使用了質數篩算法的修改。

from math import sqrt
from collections import Counter
def prime_factors(lst):
    maximumnumber=max(lst)
    primesieve=[0]*(maximumnumber+1)
    primesieve[0]=1
    primesieve[1]=1
    #DOING PRIME NUMBER SIEVE
    for i in range(2,int(sqrt(maximumnumber))+1):
        if(primesieve[i]==0):
            for j in range(2*i,len(primesieve),i):
                primesieve[j]=i

    for j in range(len(lst)):
        num=lst[j]
        factors=[]
        #take each number(num) and divided it by a prime number (primesieve[num])
        #do it until you find no more prime factors for number
        while(primesieve[num]>0):

            factors.append(primesieve[num])
            num=num//primesieve[num]
        factors.append(num)
        yield Counter(factors)

for i in prime_factors([3,4,6]):
    print(i)

輸出

Counter({3: 1})
Counter({2: 2})
Counter({2: 1, 3: 1})

我會解釋我做了什么

  1. 使用素數篩選算法在列表中的 0 和最大元素之間找到素數,鏈接到算法,我只是修改了該算法的一部分,而不是使用素數數組作為布爾值,整數來顯示哪個它被除以的數字
  2. 遍歷數字並找到所有質因數

暫無
暫無

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

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