题解 | #质数因子#

质数因子

http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607

  1. 按照一般的写法,python在一个用例会超时,因此关键在于第一个while循环的条件,i只用从2到sqrt(N),而不是N。
  2. 我自己的理解是当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)的最大整数。
  3. 所以退出第一个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))
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务