功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 ) 最后一个数后面也要有空格

文章目录


题目是这样的:
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

最后一个数后面也要有空格

输入描述:
输入一个long型整数

输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1
输入
180
输出
2 2 3 3 5

我的思路是求出2-number的全部质数,然后遍历相除:具体代码如下,因为在写思路,用了些散代码…

num = int(input())
lst = []
re_list = []
for i in range(2,num): # 找质数
    for j in range(2,i-1):
        if i%j == 0:
            break
    else:
        lst.append(i)
n = 0
while True:       #找最小的指数因子
    if num % lst[n] == 0:
        num = num/lst[n]
        re_list.append(lst[n])
        if num == 1:
            break
        n = 0
    else:
        n += 1
for i in re_list: #遍历输出
    print(i,end=' ')

后来想了想,这种做法真的很蠢…
改进思路: 从2开始除这个数,2如果能除尽,就用2除(换言之就轮不到4,8,10等来除);2不能除,那用3去除,3能除尽就除,除不尽i继续递增;假如i递增到4了(同志们想想是不是直接将4pass了?因为4如果能除尽,那么它前面的2就已经去除了,根本轮不到4除),i再增到5,能除尽就除,除不尽用下一个6去除,同理,肯定pass,因为6如果能除尽,前面的3早就除了,轮不到6去除。。。由此可知,得到的因子自然就是质因子了!

 number = int(input())
        i = 2
        while number != 1:
            while number % i == 0:
                print(i,end=' ')
                number = number / i
            i = i + 1

这样问题就很简单的解决了~~

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值