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秒待たされるかどうか程度です。