Я относительно новичок в Ruby, но с точки зрения языка он кажется достаточно простым. Я работаю над проектом Euler с Ruby, и у меня огромная проблема со скоростью в следующем:
Сумма простых чисел меньше 10 равна 2 + 3 + 5 + 7 = 17. Найдите сумму всех простых чисел меньше двух миллионов.
Мой код:
beginning_time = Time.now
(1..10000).each { |i| i }
def isPrime(num)
factors = 0
primecount = 1
while primecount <= num
if (num%primecount == 0)
factors += 1
end
if (factors > 2)
return false
end
primecount += 1
end
return true
end
def make_sieve(num)
sieve = Array.new(num)
summation = 0
for i in 1..num
if(isPrime(i) == true)
summation += i
puts i
for x in i..num
if x%i == 0
# Go through entire array and make all multiples of i False
sieve[x] = false
else
sieve[i] = true
end
end
else
# If i is NOT prime, move to the next number. in the For Loop
next
end
end
puts summation
end
make_sieve(2000000)
end_time = Time.now
puts "Time elapsed #{(end_time - beginning_time)*1000} milliseconds"
Я думаю, что у меня есть правильное представление о сите, но я действительно понятия не имею, что происходит, что делает эту программу такой медленной. Я запускаю его с 20 000, и это занимает около 15 секунд, что кажется медленным даже до сих пор, хотя вывод выходит НАМНОГО быстрее, чем когда я ставлю 2 000 000.
Я делаю это неправильно логически или синтаксически или и то, и другое?
require 'prime'; puts Prime.each(2_000_000).reduce(:+) # 142913828922
- person Jörg W Mittag   schedule 09.08.2013