素数

BASIC入門編

ひろじいべーしっくch 第28回の動画の解説・補足。(0-028)

ここでは、サンプルプログラム「そすう」の説明のほか、コラッツの予想、うす口解説を紹介します。

プログラム1(そすう1、とりあえず1200まで)

今回のプログラムはこちら。(公開キー443E4X1、以下、LOAD”N28_SOSUU”について解説します。)

このプログラムはプラスキーでの実行後、整数を入力し、その数が素数であるかどうかの判定をします。素数である場合、「これは素数です。」としゃべります。素数でない場合、6種類のいずれかのコメントをしゃべります。

※訂正があります

動画の3分3秒

このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。

一部の内容を省略している箇所があります。

詳細を知りたい方は公式リファレンス等も参照してください。

動作の説明

以下は、おおまかな動作の説明です。

概略図は以下の通りです。

動画の2分36秒(実行画面)

プログラム2(そすう2、14桁まで)

今回のプログラムはこちら。(公開キー443E4X1、以下、LOAD”N28_SOSUU2”について解説します。)

このプログラムはプラスキーでの実行後、整数を入力し、その数が素数であるかどうかの判定をします。素数である場合、「これは素数です。」としゃべります。素数でない場合、6種類のいずれかのコメントをしゃべります。

動作の説明

以下は、おおまかな動作の説明です。

概略図は以下の通りです。

動画の6分23秒(実行画面)

プログラム2_2(そすう2_2、そすう2改良版、判定を高速化)

自然数N=P×Qの式(P≦Qの条件)であるとき、素数であればP=1、Q=Nが成立する。

素数ではない数に着目すると合成数であるため、2≦P≦Nの平方根が成立することから、次のような判定の高速化が成り立ちます。

動画の9分4秒で解説。

SQR

SQR(数値)

平方根を計算する

引数

数値

平方根を求める数値

返値

求めた平方根

A=SQR(4)

WHILE

WHILE 式

式の計算結果が偽(0)の場合、続くWENDの次の命令に処理を移す

・式が真(0以外)の場合WHILEの次の命令に処理を移し、WEND命令が来たらWHILEに戻って再度式を計算する。

A=0:B=4

WHILE A<B

 A=A+1

WEND

WEND

直前のWHILE命令に処理を移し、再度WHILEから実行する

A=0:B=4

WHILE A<B

 A=A+1

WEND

プログラム2_3(そすう2_3、そすう2改良版、実数型に変更)

整数型から実数型に変更することにより、扱う範囲を広げています。

整数型の変数に#をつけると実数型になります。MOD命令は整数型専用であるため、FLOOR命令(実数型の切り捨て)を使って代用しました。実数型は桁数を多く利用できますが、浮動小数点のためにも桁を使用しますので、14桁以上を使用する際には注意が必要です。

FLOOR

FLOOR(数値)

小数点以下を切り下げる

・その数を超えない最大の整数を得る(床関数)。

・FLOOR(12.5)は12、FLOOR(-12.5)は-13となる。

・結果は小数点以下すべて0となるが、実数型となる。

引数

数値

元になる数値

返値

小数部を切り下げた値

関連

INT:整数化(切り捨て)、ROUND:四捨五入、CEIL:切り上げ

A=FLOOR(12.345)

プログラム3(そすう3、素数一覧をつくってみた)

今回のプログラムはこちら。(公開キー443E4X1、以下、LOAD”N28_SOSUU3″について解説します。)

このプログラムはプラスキーでの実行後、その数が素数であるには画面に出力します。停止には再びプラスキーで終了します。

LOCATE [スクリーンID] OUT 座標X,座標Y

LOCATE [スクリーンID] OUT 座標X,座標Y

文字表示座標を取得する

・現在の文字表示座標を取得する。

引数

スクリーンID

表示座標を指定するテキストスクリーンのID:0~4

・省略時は4。

返値

座標X, 座標Y

・現在の文字表示座標を取得する。

LOCATE OUT X,Y

動作の説明

以下は、おおまかな動作の説明です。

概略図は以下の通りです。

動画の15分50秒(実行画面)

プログラム3_2(そすう3_2、そすう3改良版、判定を高速化)

プログラム3_3(そすう3_3、そすう3改良版、すべての素数を配列に記録して判定をさらに高速化)

動画の17分17秒(実行画面)

補足

コラッツの予想、うす口解説を紹介します。

Wikipedia
コラッツの問題
Prog0:Users - Prog0

袋とじ1(コラッツの予想、整数型)

動画の20分40秒(実行画面)

袋とじ2(コラッツの予想、実数型)

動画の21分14秒(実行画面)

袋とじ3(コラッツの予想、実数型、自動的に初期値を1加算)

下記の様に水色の部分を追加して、自動化します。

動画の24分35秒(実行画面)

まとめ

1.数学の世界、そしてアルゴリズムの面白さ

判定スピードを高速化するにあたり、素数の特徴を検討したことにより、WHILE~WEND命令やSQR命令(平方根)を利用して実現できました。

2.実数型について

整数型の変数に#をつけると実数型になります。MOD命令は整数型専用であるため、FLOOR命令(実数型の切り捨て)を使って代用しました。実数型は桁数を多く利用できますが、浮動小数点のためにも桁を使用しますので、14桁以上を使用する際には注意が必要です。

追加情報

下記の様に水色の部分を追加して、自動化します。

さらに次の解説の様に、配列のペアを見つけて最大公約数、最小公倍数を求めます。

動画の28分17秒

動画の29分6秒(実行画面)

コメント

タイトルとURLをコピーしました