Aby sprawdzić czy dana liczba jest liczbą pierwszą, można to zrobić na wiele sposobów. Ale ja na początek wybrałem wersję najprostszą, czyli metodę dzielenia. Można napisać taki kod:
num = gets.chomp.to_i
prime = 1
for i in (2..(num - 1))
if num % i == 0
prime = 0
break
end
end
if prime == 1
puts "Liczba #{num} jest pierwsza."
elsif prime == 0
puts "Liczba #{num} nie jest pierwsza."
end
ale czy jest on poprawny? Chodzi mi o zastosowanie pętli for. Czy lepiej (a może ładniej) jest stosować takie konstrukcje?
2.upto(num - 1) do |i|
if num % i == 0
prime = 0
break
end
end
albo
num_range = 2..(num - 1)
num_range.each do |i|
if num % i == 0
prime = 0
break
end
end
Czy to nie ma znaczenia? Oczywiście wszystkie wersje liczą to samo, ale chodzi mi o wybór konwencji przy pisaniu kodu.
Po pierwsze powinieneś zacząć od pierwiastka z num a nie num - 1
Ja wybrałbym ostatnią wersję - ale jestem początkującym niech wypowiedzą się starzy wyjadacze:)