import sys
num1 = int(input())
num2 = int(num1 ** 0.5) + 1 # 根号取整
# print(num2) # 调试信息
list1 = []
# for i in range(2, num1 + 1): # 直接遍历会超时
# while num1 % i == 0:
# list1.append(i)
# num1 = num1 / i
def is_prime(n):
"""判断是否为质数(n≥2)"""
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
# 优化后的试除法
i = 5 # 已排除2和3的倍数, 序列:5, 7, 11, 13, 17, 19,...
w = 2 # 控制步长,初始为2,后续在2,4之间交替
# n < 25的时候都能通过if判断,直接true or false
while i * i <= n:
if n % i == 0:
return False
i += w
w = 6 - w # 优化:跳过偶数和3的倍数
return True
for i in range(2, num2 + 1 ):
if is_prime(i) != True:
continue
while num1 % i == 0:
list1.append(i)
num1 = num1 // i
if num1 != 1 and is_prime(num1) == True:
list1.append(num1)
print(*list1, sep=' ')
核心知识: 优化判断质数,n因数只需从1遍历√n,除法的'/' '//' '%',