python3 终于不超时了

质数因子

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

def func():
    num = int(input())

    def getprime(n):
        i = 2
        while i * i <= n and n >= i:
            while n % i == 0:
                n = n // i
                print(i, end=" ")
            i = i + 1
        if n - 1:
            print(n, end=" ")
    getprime(num)


if __name__ == "__main__":
    func()

全部评论
看懂了,我还优化了一下,谢谢大神给的思路 def fun(n): if 2 <= n: while n % 2 == 0: n = n // 2 print(2, end=" ") if n != 1: i = 3 while i * i <= n: while n % i == 0: n = n // i print(i, end=" ") i = i + 2 if n - 1: print(n, end=" ") num = int(input()) fun(num)
3 回复 分享
发布于 2021-02-25 13:03
关于while i * i <= n我的理解是:每次while n % i == 0内的循环求得是n的最小质因子,找到后再把n值更新,然后再求新n值得最小质因子。而一个非质数的最小质因子的平方是一定小于或等于这个非质数的。运算到最后n的值会更新成原始数的最大质因子,所以最后直接输出就可以(但得注意n不能是1)
2 回复 分享
发布于 2021-08-08 09:54
关键就在第6行,把搜索次数减小了不少
1 回复 分享
发布于 2021-07-02 09:19
n-1是为了输出最后一个质因数
1 回复 分享
发布于 2021-02-18 17:55
n - 1是什么意思...
点赞 回复 分享
发布于 2021-02-17 21:19
我懂答主的意思,但不理解n-1是怎么起作用的,我改成了 if n==1: pass else: print(n,end=' ') 这样也对
1 回复 分享
发布于 2021-04-14 20:38
当n=1时这个是不是就有问题了
点赞 回复 分享
发布于 2022-03-18 09:56
好巧妙哦,谢谢分享。
点赞 回复 分享
发布于 2021-12-10 16:29
我也是这个思路,超时。
点赞 回复 分享
发布于 2021-07-24 18:07
while i * i <= n and n >= i:为啥是这个条件呢?n都大于i的平方了,为啥还要加个n>=i呢?
点赞 回复 分享
发布于 2021-07-23 20:25
这里之所以用 n-1 来判断输出是因为最后剩余的数如果不是1,就是不能被之前<=i 的所有数整除,那么这个数也是一个质数. [证明: 反证法, 如果n不是质数,那么他可以被大于等于(i+1)的数整除,商记为b, 又n跳出循环,则说明 i*i>n, 故 b
点赞 回复 分享
发布于 2021-06-27 16:52
同样的思路,不同的时长,原来是我判断边界的条件不够严谨,学到了
点赞 回复 分享
发布于 2021-03-11 17:59
能不能说下思路 这个思路没理解,怎么想到要i*i<=n 多谢
点赞 回复 分享
发布于 2021-02-20 10:56
这个思路很巧妙,用第一层循环用while同时搭配实时更新减小的n,降低了时间复杂度,同时这里:while i * i <= n and n >= i 只写while i * i <= n 即可
点赞 回复 分享
发布于 2021-02-16 11:53

相关推荐

萧索X:写篮球联赛干嘛,陪老板打篮球吗。还有实习经历要写自己所在岗位具体完成什么工作,自己的任务具体完成了什么需求,给公司带来了哪些量化增长
点赞 评论 收藏
分享
评论
78
39
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务