いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)素数かどうか判定する

 Googleスプレッドシートで数値が素数かどうかを判定する方法についてです。

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

手順

f:id:accs2014:20200215151033p:plain:right:w400

 画像は、B2:B19に3から20までの整数を並べ、さらにC3セルに式を入力した結果です。
 C3セルの値は「1」となっており、これは隣のB2セルの値(3)が素数であることを表しています。

 C3セルに入力した式は次のようなものです。

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

 SEQUENCE関数を使い、「2」から「B2セルの値の平方根より大きい整数で最も小さいもの」までを生成しています。後者は「B2セルの値の平方根より小さい整数で最も大きいもの」で足りるので、SQRT(B2)のところをSQRT(B2)-1としてもいいのですが、3以下の値に対してエラーになってしまうことと式の長さを考慮しました。
 そしてB2セルの数字をそれらの数字で割った余りを求め、余りのうち最小のものを抽出しています。
 B2セルの値が素数であればこの値は0になりますし(2以上の整数で割り切れていることになるため)、素数でなければ1になりますので、これにより素数かどうかを判定できます。

 ただし、この式では2(素数)に対しては0が出力され、1に対してはエラーになります。2以下まで正しく判定するにはIF関数で区別するなどの対応が必要です
 

f:id:accs2014:20200215151038p:plain:right:w400

 そのまま数式を下方にコピーした結果です。

 ちなみにGCD関数を使っても判定できそうですが、引数の特性によりうまくいかないようです。