【发布时间】:2014-12-31 20:44:26
【问题描述】:
我正在学习 Ruby,并且正在通过 Project Euler 解决这个问题。当我尝试通过终端运行我的 Ruby 文件以获取答案时,它只是停顿(没有错误消息,但就像它的想法一样出现空白)。我假设计算这么大的数字是个问题。我尝试将我的代码复制并粘贴到 repl.it 中,但出现了以下错误消息:
(eval):12: (eval):12: 负分配大小(或太大) (NoMemoryError)
有没有办法通过终端(或任何其他建议)解决这个问题?谢谢。
编辑(在我的代码中添加):
#3. Largest prime factor
#The prime factors of 13195 are 5, 7, 13 and 29.
#What is the largest prime factor of the number 600851475143 ?
def largest_prime(num)
all_primes = []
(2...num).each do |p|
if (num % p == 0) && (is_prime?(p))
all_primes << p
end
end
all_primes.sort!
puts all_primes.last
end
def is_prime?(number)
(2...number).each do |x|
if number % x == 0
return false
else
next
end
end
true
end
puts largest_prime(600851475143)
【问题讨论】:
-
在这里发布你的代码怎么样?
-
谢谢皮蒂。我用粘贴的代码编辑了我的问题。
-
它的工作。只是要经过很多数字,
2...600851475143是一个相当大的范围。在你的(2...num).each行后面加上puts "checking #{p}",你就会明白我的意思了。 -
感谢皮蒂的帮助!