用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判断一个正整数是否为素数的算法。