求教,腾讯笔试最小公倍数,为什么会超时。。

from functools import reduce

def gcd(a, b):
    r = a % b
    if r:
        return gcd(b, r)
    else:
        return b

def lcm(a, b):
    return a * b // gcd(a, b)

def solve(n):
    m = n + 1
    res1 = 1
    res2 = reduce(lcm, [i for i in range(1, m+1)])
    while True:
        if lcm(res1, m) == lcm(res2, m):
            return m
        res1 = lcm(res1, m)
        res2 = lcm(res2, m)
        m += 1

n=int(input())
print(solve(n))

#腾讯##笔试题目#
全部评论
我也超时,只过了20%
点赞 回复 分享
发布于 2018-09-16 12:26
溢出了。你可以把res1和res2输出
点赞 回复 分享
发布于 2018-09-16 12:31
这样算是暴力解法,n在11的时候都不好使了
点赞 回复 分享
发布于 2018-09-16 12:41
你和我代码几乎一样,过30
点赞 回复 分享
发布于 2018-09-16 12:56
n = int(raw_input()) vis = [False for_ in xrange(n+1)] p, q = [], [] for i in xrange(2, n+1):    if vis[i]:        continue    p.append(i)    for j in xrange(i+i, n+1, i):        vis[j]=True for i in p:    cc, tmp=1, i    while tmp <= n:        cc += 1        tmp *= i    q.append(cc-1) lb, ub = n, n*n while ub - lb > 1:    mid = (lb + ub) / 2    flag = True      for (i, j) in zip(p, q):        if mid < 2 * (i**j):            flag = False            break    if flag:        ub = mid    else:        lb = mid print ub
点赞 回复 分享
发布于 2018-09-16 13:10

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务