整數的素因數權重分析

用Python實現將一個正整數分解素因數,以素因數的指數權重的形式來表達。例如

114444=2^{2}\times 3^{2}\times 11\times 17^{2}

表示成元組字典的形式

{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判斷一個正整數是否爲素數的算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章