【发布时间】:2015-12-09 22:14:49
【问题描述】:
Project Euler problem #168。我的解决方案是:
num = (10..10**10).inject(0) do |sum,x|
x.to_s.chars.rotate(-1).join.to_i % x == 0 ? sum += x : sum += 0
end
puts num.to_s[-5..-1].to_i
我正在处理的问题是我不知道这个“解决方案”是对还是错。当我尝试在终端上运行时,我没有收到错误消息或答案。看起来好像正在加载答案,但没有出现答案。
我认为这是因为数组太大了,那么我怎么能以另一种方式找到答案呢?我知道代码没有错误,因为我尝试了较小的范围,例如 10..10**6 并且它有效。
【问题讨论】:
-
暴力破解无法解决这个问题。10^100 太大了。像大多数欧拉计划问题一样,必须利用一些“聪明的数学特性”。
-
那么有没有其他方法可以解决这个问题?我只想知道答案lol
-
@JorgeLopezJr:我建议您在网上搜索一下以获取解释。欧拉计划是一个挑战,你应该尽自己的一份力——无论是解决问题还是研究已知的东西。 Stack Overflow 社区可能会在简单/幸运的情况下为您提供答案,但这不是保证。
-
@JorgeLopezJr,幸运的是,您需要查看的数字远少于 10**100 个。找出可以满足约束的数字模式。
-
这个挑战的重点是这个数组太大而无法遍历每个元素。
标签: ruby algorithm range iteration