整数的素因数权重分析

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

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