def isPrime?(num)
i = 2
@isFalse = 0
while i < num
divisible = ((num % i) == 0)
if divisible
@isFalse += 1
return false
end
i += 1
end
true
end
def primes(max)
startTime = Time.now
(2..max).each do |p|
puts "#{p} #{isPrime?(p)}"
end
endTime = Time.now
puts "--------------------------------------------------"
puts " FALSE values in range from (2 thru #{max}): #{@isFalse} \n TRUE values in range from (2 thru #{max}): #{[email protected]}"
puts "\nTotal time to calculate is #{endTime - startTime} seconds!"
end
primes(10)
isPrime?
проверяет, является ли данное число простым числом. primes
загружает ряд чисел и проверяет, является ли каждое из них простым.Ошибка синтаксиса? Ошибка Ruby? Ошибка с приращением экземпляра с + = 1?
Я хочу знать, сколько чисел является простым в пределах диапазона и сколько их нет.
Я добавил @isFalse += 1
мышление Я могу увеличивать каждый раз при возврате false, чтобы я мог определить, сколько чисел в диапазоне ложных, и использовать это для вычитания из max
, чтобы узнать, сколько чисел истинно.
Весь код работает правильно, за исключением того, что @isFalse
неправильно увеличивается. Почему это? Спасибо за помощь.
--UPDATE--
Мой выход: добавлены puts "About to increment @isFalse"
до того @isFalse += 1
2 true
3 true
About to increment @isFalse
4 false
5 true
About to increment @isFalse
6 false
7 true
About to increment @isFalse
8 false
About to increment @isFalse
9 false
About to increment @isFalse
10 false
--------------------------------------------------
FALSE values in range from (2 thru 10): 1
TRUE values in range from (2 thru 10): 8
Быстрая проверка отладки: напечатайте что-то перед линией '@isFalse + = 1' (например,' puts "About increment @isFalse" '). Это должно помочь определить проблему. – Alec
Следующее ваше предложение действительно выводит строку 5 раз 'puts 'About to increment @isFalse'' – fyz
@alecbenzer любое другое предложение? Я здесь. – fyz