SOSU5 の速度アップとバグ取りですが、他の素数計算プログラムを参考にしました。
旧版は、一桁の素数を決め打ちでやっていました。
for i!=2 to 10
if i!=2 then gosub print1:co!=co!+1:co1%(co!)=i!
if i!=3 then gosub print1:co!=co!+1:co1%(co!)=i!
if i!=5 then gosub print1:co!=co!+1:co1%(co!)=i!
if i!=7 then gosub print1:co!=co!+1:co1%(co!)=i!
next i!
これを全部コメントにして、2だけ決め打ちにしました。
さらに、偶数チェックを FOR STEP 2 で出来ることがわかり、以下のように
i!=2:gosub print1 :co!=co!+1:co1%(co!)=i! '★ 2は素数に決め打ち
a!=0
for i!=3 to no!-1 step 2 '★ 偶数をスキップ
loop1:
' no1$=str$(i!) '★ FOR steo 2 の
' le=len(no1$) '★スキップにより
' a!=val(right$(no1$,1)) '★この4行が
' b!=int (a!/2):if b!=a!/2 then i!=i!+1:goto loop1 '★要らなくなった
gosub loop2 '
next i!
これで少し速度アップ出来たようです。
SOSU4.EXE
Number = 50000 0: 0'34 Prime Number = 5133
SOSU5.EXE
Number.50000 0: 0'32 Prime Number = 5133
うーん、誤差範囲かな。(^^;
あとは配列の見直しで、10万までだったのを30万まで拡大出来ました。
速度的にも
Number.300000 0:12'20 Prime Number = 25997
2分もかかるので、この方式はこの辺が限界ですね。(^^;
さて、次はもっと速い別のアルゴリズムにしましょう。