题目地址
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入
180
输出
2 2 3 3 5
解题思路
思路很清晰,数字从小往大数,一定是先被小的质数整除,整除完成之后再次尝试整除,循环判断即可。
需要注意的是,用 Python
写这道题很容易超时。
为了降低时间复杂度,做了两点操作
1、循环边界定义为 int(math.sqrt(n)) + 1
2、n == 1
之后直接终止循环
再就是注意除到最后的 n
有可能本身就是质数。
代码
- Python 3
import math
n = int(input())
end = int(math.sqrt(n)) + 1
for i in range(2, end):
# n 为 1,之后的计算都没有意义,不会再有质因子
if n == 1:
break
# 从小到大,一定先被质因子整除
while n % i == 0:
n = n // i
print(i, end=' ')
# 如果 n 仍大于1,表示n本身为质数
if n > 1:
print(n, end=' ')