Ниже приведена моя реализация решета Эратосфена для поиска простых чисел до параметра верхнего предела.
В настоящее время мой код выполняется примерно за 2 секунды, когда мой параметр равен 2 000 000. Я вижу, что делаю один дополнительный шаг, устанавливая числа равными нулю, а затем уплотняя, а не просто удаляя эти числа за один шаг.
Как бы я это реализовал? У вас также есть какие-либо другие предложения по улучшению скорости моего кода?
def sieve(upper)
i = 0
list = (2..upper).to_a
(2..Math.sqrt(upper)).each do |mult|
init = mult + i
(init..upper-1).step(mult) do |index|
list[index] = nil
end
i += 1
end
list.compact
end
while
циклов), но менее читаем. - person Victor Moroz   schedule 25.09.2013~ n^2.0
?~ n^1.1
? - person Will Ness   schedule 25.09.2013