このアルゴリズムの Ruby バージョンをネットからかき集めるのではなく、ここでの説明に基づいて独自のアルゴリズムを作成したいと考えました。しかし、私は2つのことを理解できません
def primeSieve(n)
primes = Array.new
for i in 0..n-2
primes[i] = i+2
end
index = 0
while Math.sqrt(primes.last).ceil > primes[index]
(primes[index] ** 2).step(primes.length - 1, primes[index])
{|x| x % primes[index] == 0 ? primes.delete(x) : ""}
index += 1
end
primes
end
- 配列の最後まで反復しないのはなぜですか?
- 上記のリンクの説明によると、配列内の最後の要素の平方根が現在の素数よりも大きい場合、ループを解除する必要があります-私の前にこれを行います。
配列の長さを変更する削除操作と関係があると確信しています。たとえば、私の関数は現在 n=10 を入力すると 2,3,5,7,9,10 を生成しますが、これは明らかに正しくありません。これを変更して、想定どおりに機能させる方法について何か提案はありますか?