题解 | #质数因子#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
import math
n = int(input())
for i in range(2, int(math.sqrt(n))+1):
# 一个数可以被它所有的质因子表示
# 这里仅考虑不大于根号下n的因子
# 因为当n被所有不大于根号下n的【质】因子整除后,要么余1,要么余2,要么会剩下一个且仅会剩下一个大于等于根号下n小于等于n的质数(不可能出现两个不相等且同时大于根号下n的质因子a和b,这会导致a*b>n)
# for i in range(2, n):
# 2<=i<n
while n % i == 0:
# 第一个能被整除的一定是最小的质数因子(如果是合数,一定有2<=x<i的质因子x)
# 后续能被整除的也一定是质数,若是合数,则合数的质因子肯定出现在之前,不成立
print(i, end=' ') # 得到的每个i都是n的质因子(即列举重复的质因子)
n = n // i # n不断变小,确保没有i这个质因子
# 双除号:输出整数
if n > 2:
print(n)