エクセルの標準関数には素数を判定する数式がないので、エクセルでも素数判定できるプログラムを作成しました。ファイルのダウンロードで利用して頂ければ思います。
スポンサーリンク
ファイルのダウンロード
素数判定するファイルはこちらからダウンロードできます。ファイルを利用する方はファイルを開いて「コンテンツの有効化」をクリックしてください。
使い方
エクセルの標準関数を利用するのと同様の方法で、関数名の引数に素数を判定したいセルを入力します。
素数判定する関数はprimeとしました。
1 |
=prime(セル名) |
エクセルの使用例としては以下の図のようになります
判定結果は以下の3種類です。
- -1:100000000より大きい数値で判定できない
- 0:素数でない
- 1:素数
A列に数字、B列に判定結果を入力した場合の実行例は以下のようになります。
注意点
このプログラムは素数を素早く判定することを目的としています。すでに素数と確定しているテーブルを利用することで、処理の高速化を行っています。未知の数に対して素数を求めるプログラムとは異なりますのでご了承頂ければと思います。
また、判定する数値の上限は100000000までとしています。
コード
コードは下記のようになっています。素数テーブルサイズが大きいので一部省略しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Function prime(x As Long) As Integer Dim prime_box(1300) As Integer prime_box(1) = 2 prime_box(2) = 3 prime_box(3) = 5 prime_box(4) = 7 prime_box(5) = 11 ・・・テーブルを省略・・・ prime_box(1227) = 9949 prime_box(1228) = 9967 prime_box(1229) = 9973 prime_box(1230) = 10007 Dim i As Integer Dim flag As Integer '-1⇒値オーバー,0⇒素数でない,1⇒素数 flag = -1 '最大入力数をオーバー If x <= 100000000 Then '入力数が100000000以下の場合 flag = 1 '一旦素数に仮決め For i = 1 To 1230 If x Mod prime_box(i) = 0 Then '素数で割り切れる場合 flag = 0 '素数でない Exit For 'for文を抜ける End If If Int(Sqr(x)) < prime_box(i) Then '判定が終了したら Exit For 'for文を抜ける End If Next End If If x = 1 Then flag = 0 End If If x = 2 Then flag = 1 End If prime = flag End Function |
スポンサーリンク