这个问题参考了欧拉项目问题5,所以要小心剧透!问题5:
2520是可以被1到10的每个数字除的最小数,没有任何余数。可以被1到20的所有数字整除的最小正数是多少?
我用Ruby编写了以下代码作为问题5的解决方案。
num = 2520
until (1..20).all?{|x| num % x == 0}
num += 1
end
puts "#{num}"
然而,每当我运行脚本时,它都会挂起。请注意,我在1到10范围内的基本情况2520上测试了相同的方法,效果很好。
为什么它适用于更简单的情况,但不适用于更高级的情况?我能做些什么来修复我所拥有的?
比赛有点晚了,但这是我的意见。如果你喜欢简洁明了的代码,你可以做一些小的调整,让它运行得更快。这在没有超时的情况下对我有效:
num = 20
until (11..20).all?{ |i| num % i == 0 }
num +=20
end
puts num
本质上,你只需要增加20秒,因为你知道它需要被20整除,你可以跳过迭代通过集合的低1/2的任何东西。
你不能像对待别人那样粗暴地对待这个问题。你需要找到一个更有效的解决方案。
这是一种更有效的方法(如果这不是很像Ruby,请道歉):
def find_multiple
lcm = 1
(2..20).each do |i|
lcm *= i / gcd(lcm, i)
end
lcm
end
def gcd(a, b)
while b > 0
a %= b
return b if a == 0
b %= a
end
a
end
puts find_multiple
如果您正在寻找一种更像Ruby的方法来解决这个问题,您可以使用以下方法(正如steenslag在评论中建议的那样):
(1..20).inject(:lcm)
它很慢,因为答案不止2亿,而且你要按1的步骤计数。这需要一段时间。你需要一个更好的算法。
问题 null
我试图通过求和以下数列来制作一个程序来近似e: e=1 (1 / 1!) (1 / 2!) (1 / 3!) .... (1/i!) 目前,我的代码如下所示: 该程序成功地执行了n的计算(1/n!) e=2 e=2.5 线程“main”java中出现异常。算术异常:非终止十进制扩展;没有可精确表示的十进制结果。在爪哇。数学大十进制。在ch10处分开(未知来源)。第10章近似值。main(第10章E
本文向大家介绍欧拉图,包括了欧拉图的使用技巧和注意事项,需要的朋友参考一下 欧拉图-如果存在包含图G的每个边的闭合轨迹,则连通图G称为欧拉图。 欧拉路径-欧拉路径是仅使用图形的每个边缘一次的路径。欧拉路径在不同的顶点处开始和结束。 欧拉电路-欧拉电路是只使用图形的每个边一次的电路。欧拉电路始终在相同的顶点处开始和结束。当且仅当G的所有顶点均具有偶数度时,连通图G是欧拉图,而当且仅当其边缘集可分解为
带渐变后: 30秒/80秒(带清洁) 我对解决方案进行了分析: 结果报告中的主要任务是以下任务:(在没有清洁的构建中) Build.Gradle:
我有一个表,有3000000条记录。 +--------+ 计数(*) +--------+ 发生什么事了?
13195的主要因子为5、7、13和29。数字600851475143中最大的素因子是什么? 我用自己的方式在Euler项目上解决了这个问题,速度很慢,然后我在某人的github帐户上找到了这个解决方案。我不明白为什么它会起作用。为什么删除了许多因子,这些因子等于一个指数?有什么见解吗?