いきなり答える備忘録

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

(Gスプレッドシート)すべての約数を求める

 Googleスプレッドシートで、数値のすべての約数を列挙する方法についてです。

  • REDUCE/LAMBDA関数を使って、数値の約数をすべて求めることができます。

手順

 画像では、B列に記録された各数値のすべての約数を求めています。
 具体的にはD3セルに次のような式を入力して下方にコピーしています。

 D3セル(下方にコピー)

=TRANSPOSE(SORT(UNIQUE(
REDUCE(1,SEQUENCE(SQRT(B3)),
LAMBDA(a,b,IF(MOD(B3,b),a,{a;b;B3/b}))
)
)))

 さしあたり「1」をaの初期値(配列)にしておき、「1から『B3の平方根(小数切捨)』までの整数の配列」をbとしています。
 あとはb(のぞれぞれ)がB3の約数であったら(B3をbで割った余りが0だったら)bとB3/b(いずれもB3の約数)をaの末尾に追加していきます。
 約数には重複するものが出るのでUNIQUEで重複を除き、ソートと転置を行って完了です。
 SEQUENCEで生成する配列については2からスタートして「SQRT(B3)-1」個にするのが正確ですが、式の短さを優先しています。


 約数の個数を求めるだけならソートや転置は要りませんので、次のようになります。

 D3セル(下方にコピー)

=ROWS(UNIQUE(
REDUCE(1,SEQUENCE(SQRT(B3)),
LAMBDA(a,b,IF(MOD(B3,b),a,{a;b;B3/b}))
)
))