素数 "列挙" アルゴリズムを極めるスレ
■ このスレッドは過去ログ倉庫に格納されています
0554デフォルトの名無しさん
NGNG「乗算は加算の繰り返し、除算は減算の繰り返し」なので突き詰めれば
除算部分を別の等価のアルゴリズムに摩り替えることは常に可能なわけで…。
まあ面倒だからお手軽な組込除算命令を使うよね。普通は。
けど2や4の定数で常に乗除算するなら等価のシフト演算に置換する
くらいのテクは常套手段かと。#“除算命令の抽象化”をやめてしまう
ようなものかな?それに「奇数か偶数(2の倍数)か」のふるいなんて
「x & 1」で解かるんだから置き換えなくちゃ損だよね。
余談の余談;
アセンブラレベルで悪いけど、PentiumのDIVは表引きアルゴリズムをCISCに組みこんだ
ものなので演算コストが読みにくいんだが、RISC系の場合はそのへん割り切ってて
演算有効ビット数+α=実行クロック数くらいの演算コスト。
例えば……。SuperHなどは“必要精度(ビット数)分、(1回1ビット精度の)DIVを繰り返せ”と
いう素敵なアセンブル仕様なので、8ビット精度なら8回だけ、16ビット精度なら16回だけ、
ってふうに最適化することで演算コストを大きく切り詰められるんだよな。(´д`;
閑話休題;
>>549
> 2*3*5*7*11で、2310まで
> 篩いに落ちるのを、目で見てソースに落とすのを
> 考えると鬱るので、まだやってません。
Perlerみたいなことを言うけれど…、そのソース(てか素数源ふるい表)自体を
プログラムに作らせちゃったほうが早くて正確じゃないですか?(´・ω・`)
初期化段階で*11までの表を計算させちゃって、あとは2310の倍数単位
ループ内で、例外をふるってく…と。
#この手だと13までは苦でなさそう。
■ このスレッドは過去ログ倉庫に格納されています