第10講 素数探索

第5話 素数探索プログラムを奇数でのみ割る
新新バージョン
新新バージョン
を実現するプログラム例
#! ruby -Ks
hj=Time.now
def sh(a)
 if a==1 then
  return 0
 end
 if a==2 then
  return 1
 end
 if a%2==0 then
  return 0
 end
 b=a**(1/2.0)
 for i in 3.step(b,2)
  if a%i==0 then
   return 0
  end
 end
 return 1
end
cn=0
for i in 1..10000
 if sh(i)==1 then
  if i<10
   print " ", i," "
  else
   if i<100 then
    print " ", i," "
   else
    if i<1000 then
     print " ", i," "
    else
     print i," "
    end
   end
  end
  cn+=1
  if cn>1 && cn%20==0 then
   print "\n"
  end
 end
end
ow=Time.now
print "\n"
print "見つかった素数の個数は",cn,"個です。\n"
print "素数探索時間は",ow-hj,"秒です。\n"
参考ダウンロード添付ファイル

旧バージョンの場合
旧バージョン
新バージョンの場合
新バージョン
新新バージョン
新新バージョン
今回は余り改善効果はありませんでした。
さらに、高速化を考えましょう。

新新バージョンでは、
例えば、443が素数であることを判定するために、
3,5,7,9,11,13,15,17,19,21
で割っていますが、
この中で9,15,21は不要です。
3の倍数でなければもちろん、
9,15,21の倍数ではありません。
3,5,7,11,13,17,19
で割れば良いのですが、
これって全部素数ですね。
そうです。
奇数ではなく、素数で割っていけばよいのです。
それまでに見つかった素数を配列に収納しておいて、
素数のみで割れば良いですね。
旧バージョンの場合
旧バージョン
新バージョンの場合
新バージョン
新新バージョン
新新バージョン
バージョン4の場合
バージョン4



第4話へ 第6話へ
004


eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
vba 2013 2010 2007 入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門第1部へ
本サイトトップへ