
素数の算出プログラミング
EXCELのVBAとMYSQLのprocedureで素数計算のプログラムを作成しました。
VBAが将来無くなるとはとても残念ですが、(開発時のテストデータ作成など超重宝しました)windows11+excel2000のVBAで(マクロのモジュールから表示して、デバック実行も可)動きますのでアプリのある方は遊んでみて下さい。MYSQLはHeidiSQLで作成しました。エディタはMIFES8(ソースだけあってライセンスコードが無くなっていたので問い合わせたら販売履歴があるとういことで利用可になりました、感謝)
EXCEL ソース配下です。1は除外しています。
ーーーーーーー
Sub prime_test()
'
Dim test_number As Integer: test_number = 2 '/* チェック中の値 /
Dim inc_number As Integer: inc_number = 1 '/ わる値 2~ /
Dim prime_num_cnt As Integer: prime_num_cnt = 2 '/ 素数カウント /
Dim max_num As Integer: max_num = 1000 '/ 探す最大値 */
For test_number = 2 To max_num
For inc_number = 2 To test_number - 1
'/*2~ inc_number 割り切れる値があれば素数でないので処理を抜ける*/
If test_number Mod inc_number = 0 Then
Exit For
End If
Next
'
If inc_number >= test_number - 1 Then
'/*割り切れる数値がなかったので素数 素数とし登録*/
Dim str1 As String
str1 = Trim(str(prime_num_cnt))
' EXCELのシートに転記
ThisWorkbook.Sheets(1).Range("A" + str1) = prime_num_cnt
ThisWorkbook.Sheets(1).Range("B" + str1) = test_number
ThisWorkbook.Sheets(1).Range("C" + str1) = Now
prime_num_cnt = prime_num_cnt + 1
End If
Next
'/* 計算終了 */
End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
MYSQL
テーブルのスクリプトは以下です。(もう少しスマートにコーディングしたかったのですが、MYSQLのコメントでシックハックして(汗)、無料版はきつい)
-- テーブル作成
CREATE TABLE prime_number(
NUM_id int AUTO_INCREMENT,
prime_number1 int ,
prime_number2 int ,
last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (NUM_id)
) ;
ーーーーーーーーーprocedure なんか
BEGIN
DECLARE test_number INT DEFAULT 3; /* チェック中の値 /
DECLARE inc_number INT DEFAULT 1; / わる値 2~*/
DECLARE prime_num_cnt INT DEFAULT 3; /* 素数カウント*/
DECLARE max_num INT DEFAULT 200; /* 探す最大値 */
loop1:WHILE test_number <= max_num DO
loop2: LOOP
SET inc_number = inc_number + 1;
IF inc_number >= test_number THEN
/*割り切れる数値がなかったので素数 素数とし登録*/
INSERT INTO prime_number(prime_number2)
VALUES(test_number )
;
LEAVE loop2;
END IF;
/*2~割り切れる値があれば素数でないので処理を抜ける*/
IF MOD( test_number , inc_number ) = 0 THEN
LEAVE loop2;
END IF;
END LOOP loop2;
SET test_number = test_number + 1 ;
SET inc_number = 1;
IF test_number >= max_num THEN
LEAVE loop1; /* 計算終了 */
END IF;
END WHILE loop1;
END