7

私はプロジェクトオイラー問題5に取り組んでおり、以下を使用しています。

def findLCM(k):
start=time.time()
primes=[2,3,5,7,11,13,17,19,23]
factors=[]
for factor in range(2,k):
    if factor in primes:
        factors.append(factor)
    else:
        factorization=[]
        while factor!=1:
            for prime in primes:
                lastFactor=prime
                if factor%prime==0:
                    factor/=prime
                    factorization.append(lastFactor)
                    break
        tmpFactors=[]
        for tmpFactor in factorization:
            if tmpFactor not in factors:
                factors.append(tmpFactor)
            else:
                tmpFactors.append(tmpFactor)
                factors.remove(tmpFactor)
        for tmpFactor in tmpFactors:
            factors.append(tmpFactor)
        print factors
product=1
for factor in factors:
    product*=factor
factors.sort()
end=time.time()
fnTime=end-start
return product, fnTime, factors

因数分解とこの関数のような因数分解を組み合わせることができるPython関数はありますか?たとえば、との場合factors=[2, 3, 5]factorization=[2, 2, 3]結合されたリストは。になります[2, 2, 3, 5]

4

1 に答える 1

23

用語は「マルチセットの和集合」です。

これは、 collections.Counterを使用してPythonで実装されます。

>>> from collections import Counter
>>> combined = Counter([2, 3, 5]) | Counter([2, 2, 3])
>>> list(combined.elements())
[2, 2, 3, 5]
于 2012-08-08T23:42:38.497 に答える