いきなり答える備忘録

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

(Excel)指定値以下の素数をすべて求める

 Excelで指定値以下の素数をすべて列挙する例です。エラトステネスの篩に基づく式を用いています。

  • REDUCE/LAMBDA関数を用いて指定値以下の素数をすべて求めることができます。

手順

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

 D3セル

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

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

 ちなみにどこまで求められるかわかりませんが、100000以下ぐらいなら1秒待たされるかどうか程度です。