【python】课后练习:质因数分解

请输入一个整数: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月春生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值