お疲れ様です。セキュリティエンジニアを目指している吉川です。
日々の備忘録を自分が後で見直せるように書いていきます。
ruby初心者なのでもし同じように初心者の方が見た時に知識を共有できるよう頑張って更新します。よろしくお願いいたします。
コードを書いてrubyを覚えていこうという試みです。
素数判定ロジック
素数判定メソッド
def prime?(number)
return false if number <= 1
(2..Math.sqrt(number)).each do |i|
return false if number % i == 0
end
true
end
テスト用の配列
numbers = [2, 3, 4, 7, 10, 13, 17, 18, 19]
各数字が素数かどうかを判定して表示
numbers.each do |num|
if prime?(num)
puts "#{num} is a prime number."
else
puts "#{num} is not a prime number."
end
end
素数ってなに? >>1とその数自身でしか割り切れない自然数
return false if number <= 1
素数ではない特別なケースをチェック。1以下の数字は素数ではないので、
falseを返す。0や負の数、1も素数ではないことを記述。
(2..Math.sqrt(number)).each do |i|
2からMath.sqrt(number)(√number)までの整数を使ってループ。
√(平方根)を使う理由:例えば、n = 100 の場合
100が素数かどうかを調べたいとき、2から100まで全部で割り算を試すのは非効率。
100 の平方根である √100 = 10 までの数で割り算を試せば十分。
100の約数は必ず10以下の数のペア(例: 2×50, 4×25)と、10以上の数のペアが対応する形になっています。
結論、nが素数でない場合、その約数の一つは √n以下に存在するはず。それを利用して、余計な計算を省いているのが((2..Math.sqrt(number)).each do |i|)の部分。