Googleスプレッドシートで数値が素数かどうかを判定する方法についてです。
- MOD関数とSEQUENCE関数を組み合わせることで、数値が素数かどうかを判定することができます。
手順
画像は、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セルの数字をそれらの数字で割った余りを求め、余りのうち最小のものを抽出しています。
この値が0であればB2セルの値は素数ですし(2以上の整数で割り切れていることになるため)、そうでなければ、つまり1であれば素数ではありません。このようにして素数かどうかを判定できます。
ただし、この式では2(素数)に対しては0が出力され、1に対してはエラーになります。2以下まで正しく判定するにはIF関数で区別するなどの対応が必要です。
そのまま数式を下方にコピーした結果です。
ちなみにGCD関数を使っても判定できそうですが、引数の特性によりうまくいかないようです。