用Python實現將一個正整數分解素因數,以素因數的指數權重的形式來表達。例如
表示成元組字典的形式
{2: 2, 3: 2, 11: 1, 17: 2}
先定義素數池:
primePool = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,79,83,89,97,101,103,107,109,113]
實現:
def factorizationToPrime(num):
if num == 1:
return {}
pDict = {}#素因數字典
d = num#縮倍值
p = 2#輪循因數
sq = math.sqrt(num)
for m in primePool:
p = m
if p>sq:
break
while math.fmod(d,p)==0:
d = d/p
if p in pDict:
pDict[p] = pDict[p]+1
else:
pDict[p] = 1
if math.fmod(d,p)!=0:
sq = math.sqrt(d)
while p<=sq:
p = p+2
if isPrime(p):
while math.fmod(d,p)==0:
d = d/p
if p in pDict:
pDict[p] = pDict[p]+1
else:
pDict[p] = 1
if math.fmod(d,p)!=0:
sq = math.sqrt(d)
if d>1:
pDict[math.floor(d)]=1
return pDict
函數 isPrime 請參見Python判斷一個正整數是否爲素數的算法。