题目要求:
写一个函数,使得其输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ),最后一个数后面也要以换行符结尾。
即求素因数分解。
代码如下:
def gen_prime(n): # 定义质数生成函数
list_prime = list()
nums = dict() # 字典key存放所有自然数,值为1表示质数,0为合数
i = 2
while i < int(n + 1): # 将nums所有key对应value赋1
nums[i] = 1 # 注意:合数素因数小于等于n的1/2,但素数素因数
i += 1 # 是它本身,所以仍需循环到n
j = 2
while j < int(n + 1):
if nums[j] == 1:
list_prime.append(j)
tmp = 2 # 用tmp表示倍数(写的过程中用了n,重名导致结果不对)
while tmp*j < int(n + 1): # 将质数倍数标记为0
nums[tmp*j] = 0
tmp += 1
j += 1
return list_prime
def pri_div(): # 定义求素因数函数
divisors = list() # 初始化素因数列表
n = int(input("素因数计算:\n请输入一个整数:"))
l = gen_prime(n)
i = 0
while i < len(l) and n >= 1:
if n % l[i] == 0:
divisors.append(l[i])
n = n/l[i]
else:
i += 1
return divisors
prime_divs = pri_div()
print("素因数为:", end='')
for i in range(len(prime_divs)-1):
print(prime_divs[i], end=' ')
print(prime_divs[-1], end='\n')
运行结果如下: