题解 | #质数因子#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
- 按照一般的写法,python在一个用例会超时,因此关键在于第一个while循环的条件,i只用从2到sqrt(N),而不是N。
- 我自己的理解是当sqrt(N)为整数时,i=sqrt(N)时,进入第二个while循环,N = N/i = N/sqrt(N) = sqrt(N), 然后继续第二个while循环,N = N/i = sqrt(N)/sqrt(N) = 1,也就是此时N已经为1,不能再分解了,因此没有必要再进入下一个(第一个)while循环;当sqrt(N)不是整数,那第一个while循环,i最后的取值是小于sqrt(N)的最大整数。
- 所以退出第一个while循环后,判断一下当前N,如果为1,则不用加到结果集中,如果大于1,把当前的N加入结果集中。
def solve(integer):
res = []
i = 2
while i*i <= integer:
while integer%i == 0:
integer /= i
res.append(i)
i += 1
if integer > 1:
res.append(int(integer))
return res
if __name__ == '__main__':
integer = int(input())
res = solve(integer)
print(" ".join(str(i) for i in res))