いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)指定値以下の素数をすべて求める

 Googleスプレッドシートで指定値以下の素数をすべて列挙します。
 Excelでも全く同じことができますがGoogleスプレッドシートでもLAMBDA関数とサポート関数が使えるようになりましたのでその記念です。参考まで。

  • REDUCE/LAMBDA関数でエラトステネスの篩を実行し、指定値以下の素数をすべて求めることができます。

手順

 画像では、B3に指定値として「40」という数値が入力されています。
 これに対しD3セルに式を入力して、この値以下の素数をすべて求めています。

 式は下記のとおりです。

 D3セル

=REDUCE(
SEQUENCE(B3-1,1,2),SEQUENCE(SQRT(B3)-1,1,2),
LAMBDA(a,b,FILTER(a,(a=b)+(MOD(a,b)>0)))
)

 2022年9月ごろから使えるようになったLAMBDA関数とREDUCE関数を使っています。
 まず「SEQUENCE(B3-1,1,2)」つまり2から指定値までの整数の集まりにaと名付けています。
 また、「SEQUENCE(SQRT(B3)-1,1,2)」つまり2から指定値の平方根(小数切り捨て)まで(結果として2から6まで)の整数の集まりにbと名付けています。
 そしてFILTER関数により、aの中から「bと等しいかbの倍数でない値」を(まずb=2の場合について)抽出し、次の抽出(次のb=3の場合における抽出)におけるaとして渡します。これがb=6まで繰り返され、結果的に最初のaの中の素数だけが残ります。aやbという命名と、演算結果を順次引き渡して最後の結果だけ出力する部分がREDUCE/LAMBDA関数の機能です。
 なお、FILTER関数の条件でOR関数が使えないので+演算子を用いる必要があります。

 Excelでも全く同じようにできますが、Excelと違ってSEQUENCE関数の第2引数(列数)を省略できないことがちょっとした注意点です。