N88-BASICで素数 (3回目)

2025/1/26(日)
N88-BASICで素数 (3回目)
 
素因数分解
 
数値や式を因数の積の形にする事を
因数分解といいます
素数のみの因数の積で表す事を
素因数分解と言います
 
数値n(2以上の整数)を素因数分解するには
 
i = 2~[√n]で割れば良く
([a]はガウス記号でaを超えない最大の整数
a>0なら切り捨て、a<0なら切り上げ)
 
n = 18なら
2 ) 18
3 )  9
   3
18 = 2・3・3 = 2・32 
となります
 
アルゴリズム(解法?)
① m = [√n]
② i = 2
③ i > m なら⑥へ
④ q = n / iが
  割り切れればiが素因数, n←q, m = [√n]
  割り切れなければi←i+1
⑤ ③へ
⑥ nが素因数
 
単純だが遅い方法がその1です
 
2で割り切れなくなれば
あとは偶数では割り切れないので
偶数で割ることを省略して処理速度を
上げたのがその2です
 
ここまでが前回です
 
更に3で割り切れなくなれば3の倍数で割ることを
省略して処理速度を上げたのがその3
 
更にその3と同じ事を効率よくしたのがその4です
 
今回は
前回と同じ素因数分解を各2回ずつ実行し
その3と4の処理時間を比較してみました
 
今回TIME$を使って時間を表示しています
NL-BASIC,VL-BASIC,XL-BASICの
時刻(DATE$, TIME$)は
DATE$ Enter
TIME$ Enter
システム時刻に戻ります
 
Enterのみ入力した場合
127 * 524287 * 6700417
を計算するようにしています
 
VL,NL,XL-BASICとblg~.zip(prime003.bas)は
このブログ(以下のリンク)から
ダウンロードできます
https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい















このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)