
エントリーの編集

エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
Enumerator::Lazy でエラトステネスの篩 - Qiita
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています

- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
Enumerator::Lazy でエラトステネスの篩 - Qiita
prime_seq = Enumerator.new do |y| sieve = 2.step.lazy loop do a = sieve.first y << a sieve = siev... prime_seq = Enumerator.new do |y| sieve = 2.step.lazy loop do a = sieve.first y << a sieve = sieve.reject {|x| (x % a).zero?} end end prime_seq.take(10) #=>[2, 3, 5, 7, 11, 13, 17, 19, 23, 29] Enumerator::Lazy はsieve = 2.step.lazyのところで生成している。これの先頭aは必ず素数なので、素数列として Enumerator で取り出す(y << a)。そして、sieveからaの倍数をrejectですべて篩い落とし(Lazy だから可能なのである)、そうされたものを新しいsieveとする。以下、繰り返し、というわけである。 これは子供の頃に紙と鉛筆でやってみた「エラトステ