问题在于:
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
这是我的解决方案,但需要很多时间!你知道吗
x = 0
check = [11, 13, 14, 16, 17, 18, 19, 20]
while True:
x += 1
if all(x % j == 0 for j in check):
print "The NUMBER is", x
break
print x
我怎样才能改进它?计数器是主要问题吗?还是暂时?
编辑:我已经看到有很多不同的解决方案,但是我应该怎么做才能检查1中的每个数字,并且没有像LCM这样的函数?你知道吗
好的,谢谢大家的建议!我发现在我的例子中问题是
print x
,在终端上打印花费了太多时间。 我的最终解决方案是:它更干净,从20跳到40等等,xrange比我读到的更快。你知道吗
这是我对C++程序的实现。你知道吗
我选择
number++
,而不是number += 2
,为什么?因为奇数永远不能被2整除,所以我的搜索空间从O(n)
减少到O(n/2)
。还有一种减少空间搜索的方法,就是把代码移到number += 20 (limit)
,因为我们知道一个20的倍数可以从1-20中除数(称之为高等数学:P)。你知道吗接下来我从
limit
即20
开始检查,因为在%limit
处失败的变化比在2, 3, 4, 5 etc. // smaller numbers
处更多。因此,计算时钟周期减少了一位。你知道吗我希望这能帮助你:)
你可以从2520开始节省时间。根据案文,没有一个更小的数字能够达到这一标准。再加上被数字1-20整除的任务,而不是11-20。你知道吗
相关问题 更多 >
编程相关推荐