首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化项目Euler #5

优化项目Euler #5
EN

Code Review用户
提问于 2019-08-13 21:00:36
回答 1查看 79关注 0票数 -3

我见过许多关于这个问题的问题,但似乎没有人回答我的具体问题。

首先,最基本的问题是要找出可以被数字1到20整除的最小数。

我已经编写了一些代码来解决这个问题,但是运行时对我来说太长了。我想我对数学还不太了解,这才是真正的优化我的解决方案。我知道以1的增量迭代并不是最快的,但我想不出任何其他方法。

代码语言:javascript
复制
def smallest_divisible(range_max):
    divisors = list(range(2,range_max+1,1)) #We ignore 1 because 1 is 
                                            #divisible by everything
    x = 1
    while True:
        x += 1
        check = divisible(x, divisors)
        if check: return x


def divisible(n, lst):
    #Pass a number to compare to a list to see if the number 
    #is divisible by all elements in list
    return all(map(lambda y: n%y == 0, lst))
EN

回答 1

Code Review用户

发布于 2019-08-14 07:05:36

divisors = list(range(2,range\_max+1,1)) #We ignore 1 because 1 is #divisible by everything

这一评论是错误的。0可以除以一切。1可分为一切。

x = 1 while True: x += 1 check = divisible(x, divisors) if check: return x

我认为使用itertools.count(2)会更像Pythonic。事实上,我倾向于单线

代码语言:javascript
复制
    return next(iter(x for x in count(2) if divisible(x, divisors)))

def可除(n,lst):#传递一个数字以与列表进行比较,以查看该数字#是否可被列表中的所有元素整除,返回all(map(lambda y: n%y == 0,lst))

同样,我认为更多的Pythonic方法是一种理解:

代码语言:javascript
复制
    return all(n%y == 0 for y in lst)

我会把lst改名为divisors。价值的意义比它的类型更重要。

我见过许多关于这个问题的问题,但似乎没有人回答我的具体问题。。我知道以1的增量迭代并不是最快的,但我想不出任何其他方法。

我也看到了关于这个问题的多个问题,我记得,他们都回答了这个问题。因此,与其重复所有这些问题,我要提供的是,如果你列出五个问题,没有,我会列出五个这样做。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/226072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档