计算python中的主要因子

时间:2018-10-09 08:47:10

标签: 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]作为输出。希望对此有所帮助。

1 个答案:

答案 0 :(得分:0)

好吧,我是从头开始的,它使用了质数筛算法的修改。

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. 使用质数筛算法Link在列表中找到介于0和最大元素之间的质数,将该算法改成一种算法,我只是修改了该算法的一部分,而不是使用质数数组作为布尔值我用,Integer表示除以哪个数字
  2. 遍历数字并找到所有主要因素