Googleスプレッドシートで指定値以下の素数をすべて列挙します。
Excelでも全く同じことができますがGoogleスプレッドシートでもLAMBDA関数とサポート関数が使えるようになりましたのでその記念です。参考まで。
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引数(列数)を省略できないことがちょっとした注意点です。