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・3 2 となります アルゴリズム (解法?) ① 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を読んで遊んで下さい