Hatena::Grouprubyist

いつかはRails(笑) このページをアンテナに追加 RSSフィード

2009-05-20配列の初期化

素数探求プログラム

15:49 | 素数探求プログラム - いつかはRails(笑) を含むブックマーク はてなブックマーク - 素数探求プログラム - いつかはRails(笑) 素数探求プログラム - いつかはRails(笑) のブックマークコメント

RDEインストール記念に素数探求のプログラムを書いてみる。

新しい言語を覚えるときに、いつも最初に書くプログラム。エラトステネスの篩ですが、最適化はされていません。

ループ、条件式、配列など割とバランスのよい題材だと思います。

合ってるよなw

arry = Array.new
i = 3
while i < 99
 j = i * 2
 while j < 10000
    arry[j] = -1
    j += i
 end
 i += 1
end
i = 3
while i < 10000
  if arry[i] != -1 then
    puts i
  end
  i += 2
end

こうやって書くとN88-BASICそっくりだ。昔を思い出して懐かしくなります。

動かしてみましたが、配列が今一つよくわからない。

Array.newで作った配列はインスタンスはあるんだけど、内容は初期化されておらず、アクセスするとnilが返ります。

if arry[i] != -1 then

なんてやってごまかしているけれど、もとBASIC野郎としては

dim arry(1000)

とずばりと書いて初期化したいところなんですが。

nilの件、どうしようかなぁ。

htzhtz2009/05/21 12:31こんな感じでどうでしょうか?
Rubyの場合、こういうループでwhileを使うことは少ないと思いますので
レンジを使ったループやイテレータ、Integer#step/upto/downto系を覚えておくと
非常に便利だと思いますよ。
max = 1000
array = Array.new(max, 0)
array[0..1] = [-1, -1]

(2...Math::sqrt(max).to_i).each do |i|
(i * 2).step(max - 1, i) do |j|
array[j] = -1
end
end

array.each_index do |i|
puts i if array[i] != -1
end

delta16vdelta16v2009/05/22 23:27なるほど。
最初はBASICっぽくfor~endで書こうとしたのですが、カウンタを+=2でアップさせたかったので、while~endに書き直したのでした。
御教示頂いた方法のコードを研究してみます。
ありがとうございました。

JaliaJalia2012/10/16 10:30Dude, right on there bortehr.

evoccibevoccib2012/10/16 22:06y5ThiO <a href="http://otfagtkrsive.com/">otfagtkrsive</a>

khnrnycreyzkhnrnycreyz2012/10/20 01:54qdNtHQ <a href="http://ttiwdvfaxkyc.com/">ttiwdvfaxkyc</a>

yrtrsgqpkgyrtrsgqpkg2012/10/20 22:23Rluz3T , [url=http://hpcuwpwairem.com/]hpcuwpwairem[/url], [link=http://pahgmzhyxorm.com/]pahgmzhyxorm[/link], http://lxmomowagtqa.com/