見出し画像

素数の算出プログラミング

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

いいなと思ったら応援しよう!