文章目录
题目是这样的:
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如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
这样问题就很简单的解决了~~