请输入一个整数:90
分解质因数的结果是: 90 = 2 * 3 * 3 * 5
请输入一个整数:120
分解质因数的结果是: 120 = 2 * 2 * 2 * 3 * 5
请输入一个整数:1212121212
该数的一个商:2463661,超出当前质数表范围。
num = eval(input("请输入一个整数:"))
# 一些质数表,由于质数表不够长。当输入某些合数,比如较大值,会因最后的商值不在此列表中而超出范围。
zhishu_list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
flag = 0 # 质数列表的下标。当前下标的质数不能整数当前值,则下标后移。
result_list = [] # 存放质因数分解的结果。
orginal_num = num # 记录原始输入值。
error = False
while True:
try:
chushu = zhishu_list[flag] # 从质数表的第一个数开始,依次尝试整除。
except IndexError:
print(f"该数的一个商:{num},超出当前质数表范围。")
error = True
break
if num % chushu == 0: # 能整除,说明是一个因数,收集到列表中。
result_list.append(chushu)
num = int(num / chushu) # 更新被除数的值为商。
else:
flag += 1 # 下标0,值为2的质数,与被除数不能整除,所在下标后移尝试。
if num in zhishu_list: # 当前被除数存在于质数表中,说明分解质因数完毕。
result_list.append(num) # 当前被除数是输入的合数的最后一个因数。
break
if not error:
result_str = "" # 输出结果字符串,形式为:2 * 2 * 3 * 101
i = 0
while i < len(result_list):
# 条件表达式控制输出列表最后一个字符时,后面无”*“号
result_str += str(result_list[i]) + " * " if i < len(result_list) - 1 else str(result_list[i])
i += 1
print("分解质因数的结果是:", orginal_num, "=", result_str)