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を読んで遊んで下さい
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を読んで遊んで下さい