Python循环求素因数分解(代码)

题目要求:

写一个函数,使得其输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如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')

运行结果如下:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值