题解 | #质数因子#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
python时间超时优化
实际上除数2是个特殊的存在,当被除数可以被2整除时就一直循环。 i = 2 while int(line) % i == 0: num_list.append(i) line = int(line) / i 当不能被2整除时,以3做为除数,如果可以整除继续,不能整除则除数每次以2递加(也就是3,5,7这样),跳出循环的条件为大佬们说的定理:因为如果一个数不是素数是合数, 那么一定可以由两个自然数相乘得到, 其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。while int(line)**0.5 >= j: if int(line) % j == 0: num_list.append(j) line = int(line) / j else: j += 2
import sys
try:
while True:
line = sys.stdin.readline().strip()
if line == "":
break
num_list = []
num_str = ""
i = 2
j = 3
while int(line) % i == 0:
num_list.append(i)
line = int(line) / i
while int(line)**0.5 >= j:
if int(line) % j == 0:
num_list.append(j)
line = int(line) / j
else:
j += 2
num_list.append(int(line))
for i in num_list:
num_str += str(i) + " "
print num_str
except:
pass