整数的素因素权重分析

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

发布了15 篇原创文章 · 获赞 2 · 访问量 4381

猜你喜欢

转载自blog.csdn.net/u012632105/article/details/104622275