いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)数値が素数かどうかを判定する

 Excelで、数値が素数なのかどうかを区別する方法についてです。

  • MOD関数とSEQUENCE関数などを組み合わせて、数値が素数かどうかを判定することができます。

手順

f:id:accs2014:20200215161035p:plain:right:w450

 B2:B14の範囲に3から15の数値が並んでいます。
 これらの数値が素数かどうかをそれぞれ判定します。
 まずはB2セルの「3」を判定するため、C2セルに次のように入力します。

 C2セル

=MIN(MOD(B2,SEQUENCE(SQRT(B2),1,2)))

 SEQUENCE関数を使って「2」から「B2セルの値の平方根(を超える最も小さい整数)」までの整数を生成しています。そしてMOD関数を使ってB2セルの値をこれらの整数で割った余りを求め、MIN関数により余りのうち最も小さい値を求めています。
 結果が0であれば(自身より小さい数値で割り切れた、つまり約数があったということですので)素数でないということになりますし、そうでなければ(1であれば)素数ということになります。

 ただし、この式では2(素数)に対し0を返し、1に対してはエラーになりますので、2以下まで正しい判定をするにはIF関数などを追加する必要があります
 また、SQRT(B2)のところは本来SQRT(B2)-1で足りるのですが3以下の値に対しエラーになることと、式の長さを考慮してこうしています。

f:id:accs2014:20200215161039p:plain:right:w250

 式を確定すると結果は「1」となりました。
 つまりB2セルの「3」は素数と判定されました。

f:id:accs2014:20200215161043p:plain:right:w500

 さらに式を下方にコピーした結果です。

 素数をまとめて求めるには効率が悪いやり方ですが、特定の数値を判定するのであれば一瞬で結果が出るのでそこそこ実用的かと思います。

 なお次の記事ではこれをさらに発展させて、指定値以下の素数をすべて求める例を挙げています。

www.officeisyours.com