快手算法第三题质因数的数目,还能怎么优化

import math
n = int(input())
dp = [0] * (n+1)
dp[2] = 1
dp[3] = 1
for i in range(4, n+1):
    start = 2
    is_prime = True
    while start <= int(math.sqrt(i)):
        if i % start == 0:
            num1 = start
            num2 = i // start
            is_prime = False
            break
        start += 1
    if is_prime:
        dp[i] = 1
    else:
        dp[i] = dp[num1] + dp[num2]
print(sum(dp))



感觉已经足够优化了,但是还是只过了 80% 的样例,请问该题是歧视 Python嘛#笔试题目##快手##题解#
全部评论
Python我也没AC
点赞 回复
分享
发布于 2019-09-16 23:05
只有60……
点赞 回复
分享
发布于 2019-09-16 23:05
联想
校招火热招聘中
官网直投
我用的Java,和你的思路一模一样,全过了。。
点赞 回复
分享
发布于 2019-09-16 23:12
leetcode204可以给灵感
点赞 回复
分享
发布于 2019-09-16 23:13
python我没过。。c++能过60
点赞 回复
分享
发布于 2019-09-16 23:17
python过了,用dic保存之前的,然后list保存之前遍历的质数
点赞 回复
分享
发布于 2019-09-16 23:26
import math dic = {} rec = [] def iszhishu(x):     if x==2:         return True     for i in range(2,int(math.sqrt(x))+1):         if x%i==0:             return False     return True for i in range(2,n+1):     if iszhishu(i):         dic[i]=1         rec.append(i)     else:         for j in rec:             if i%j==0:                 dic[i]=dic[i//j]+1 ans = 0 for i in range(2,n+1):     ans += dic[i] print(ans) 我AC的代码
点赞 回复
分享
发布于 2019-09-16 23:32
不要算sum(dp), 用个变量存
点赞 回复
分享
发布于 2019-09-17 00:08
import math def isPnum(n): for v in range(2, int(math.sqrt(n))+1): if n % v == 0: return v return -1 N = int(input()) dp = [0 for _ in range(N+1)] for i in range(2, N+1): val = isPnum(i) if val == -1: dp[i] = 1 else: dp[i] = dp[i//val] + dp[val] print(sum(dp))
点赞 回复
分享
发布于 2019-09-17 14:05
楼主的代码当N=2时会报错,其他结果都一样
点赞 回复
分享
发布于 2019-09-17 14:19
我也用的Python,终极优化再优化ac的
点赞 回复
分享
发布于 2019-09-27 15:59

相关推荐

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