階乗n!の桁数を近似する式

階乗$n!$の近似式としてはスターリングの公式が有名ですが、階乗の「桁数」を近似する式はあまり知られていないように思います。また、紹介しているウェブサイトも見当たりません。そこで本稿では階乗の桁数の近似式について紹介します。

 

 階乗の桁数の近似式

$n$を正の整数として、階乗$n!$の桁数を$a_{n}$と置くとき、$$a_{n} \approx \color{red}{\left\lfloor n \log _{10}\dfrac{n}{e}\right\rfloor}$$が成り立ちます。ここで下鍵括弧は床関数(ガウス記号)であり、括弧内の実数の整数部分を表します。

このことを簡単に示しておきます。

いま$a_{n}$は$n!$の桁数なので$$\log _{10} n !<a_{n} \leqq 1+\log _{10} n ! \quad \cdots (*)$$を満たします。ここで $S_n=-\dfrac{1}{n} \displaystyle \sum_{k=1}^{n} \log _{10} \dfrac{k}{n}$ と置くと、$$\displaystyle \lim_{n \to \infty}S_{n} = -\int_{0}^{1} \log _{10} x\, d x=\log _{10} e$$となります。

$S_n$は $\log _{10} n-\dfrac{\log _{10} n !}{n}$ とも表せるので、$(*)$の各辺を$n$で割った式に代入して$$S_{n}-\dfrac{1}{n} \leqq \log_{10} n-\dfrac{a_{n}}{n}<S_{n}$$を得ます。これより$$\left| \log_{10} n-\dfrac{a_{n}}{n}-S_{n}\right|<\dfrac{1}{n}$$が成り立ち、挟み撃ちの原理から$$\displaystyle \lim_{n \to \infty}\left(\log_{10} n-\dfrac{a_{n}}{n}\right)=\log_{10} e$$を得るので、十分大きい$n$について$$a_{n} \approx \left\lfloor n \log _{10}\dfrac{n}{e}\right\rfloor$$という近似式が成り立ちます。

※なお、$\small S_n=\log _{10} n-\dfrac{\log _{10} n !}{n}$ であることは $$\small \begin{align} & \quad \ \log _{10} n-\dfrac{\log _{10} n !}{n} \\ &=\dfrac{1}{n}\log _{10} n^n-\dfrac{\log _{10} n !}{n} \\ &=-\dfrac{1}{n}\left(-\log _{10} n^n+\log _{10} n !\right) \\ &=-\dfrac{1}{n}\log _{10} \dfrac{n !}{n^n} \\ &=-\dfrac{1}{n}\left(\log _{10} \dfrac{n}{n}+\log _{10} \dfrac{n-1}{n}+\cdots+\log _{10}\dfrac{1}{n}\right) \end{align}$$と式変形することで確かめられます。

 

 近似式の精度

スターリングの公式の導出方法については検索すれば無限にヒットするので好きなものを参考にして下さい。ガンマ関数を知っていれば導出は容易ですが、$\log x$ の面積比較などを利用すれば高校数学の範囲でも容易に導くことができます。

スターリングの公式としては$$n ! \fallingdotseq \sqrt{2 \pi n}\left(\dfrac{n}{e}\right)^{n}$$または$$\log_{e}n ! \doteq n\left(\log_{e} n-1\right)+\dfrac{1}{2} \log_{e}(2 \pi n)$$で与えられる式が有名です。この2式は同じもので、対数を取っているかいないかという見た目上の違いしかありません。

さらに精度を上げると$$\small \begin{aligned} \log_{e} n! &\approx n\log_{e} n-n+{\dfrac {1}{2}}\log_{e}(2\pi n) \\ & \quad +{\dfrac{1}{12n}}-{\dfrac{1}{360n^{3}}}+{\dfrac{1}{1260n^{5}}} \\ & \quad \quad -{\dfrac{1}{1680n^{7}}}+\cdots \end{aligned}$$というように級数の形になります。項の数を増やせば増やすほど精度は上がりますが、キリがないのでせいぜい$\dfrac{1}{n}$の項で打ち止めて利用します。(ただし今回は使いません)

スターリングの近似式から得られる$n!$の桁数(の概算値)と、先ほど求めた$a_{n}$を比較してみます。階乗$n!$の真の桁数については「階乗n!の桁数のリスト」のページに $n=10^k$ ごとの階乗$n!$の桁数をリストアップして掲載しています。

ここで、スターリングの公式による桁数の概算値は$$\small \left\lfloor \dfrac{\left(n+\dfrac{1}{2}\right) \log_{e}n-n+\dfrac{1}{2}\log_{e}2 \pi}{\log_{e}10}\right\rfloor+1$$という式で求めています。

$$\scriptsize \begin{array}{l|r|r|r}
\hline n & \text{$n!$の真の桁数} & \text{スターリングの公式による} & a_{n} \\
\hline 10 & 7 & 7 & 6 \\
10^{2} & 158 & 158 & 157 \\
10^{3} & 2568 & 2568 & 2566 \\
10^{4} & 35660 & 35660 & 35658 \\
10^{5} & 456574 & 456574 & 456571 \\
10^{6} & 5565709 & 5565709 & 5565706 \\
10^{7} & 65657060 & 65657060 & 65657056 \\
10^{8} & 756570557 & 756570557 & 756570552 \\
10^{9} & 8565705523 & 8565705523 & 8565705519 \\
10^{10} & 95657055187 & 95657055187 & 95657055181 \\
10^{11} & 1056570551816 & 1056570551816 & 1056570551810 \\
10^{12} & 11565705518104 & 11565705518104 & 11565705518097 \\
10^{13} & 125657055180975 & 125657055180975 & 125657055180968 \\
10^{14} & 1356570551809683 & 1356570551809683 & 1356570551809675 \\
10^{15} & 14565705518096757 & 14565705518096757 & 14565705518096749 \\
10^{16} & 155657055180967491 & 155657055180967491 & 155657055180967482 \\
10^{17} & 1656570551809674827 & 1656570551809674831 & 1656570551809674820 \\
10^{18} & 17565705518096748182 & 17565705518096748223 & 17565705518096748196 \\
10^{19} & 185657055180967481734 & 185657055180967482143 & 185657055180967481955 \\
10^{20} & 1956570551809674817246 & 1956570551809674821340 & 1956570551809674819545 \\
\hline
\end{array}$$

ここで$a_{n}$と真の桁数との相対誤差を求めてみます。$$\small \begin{array}{l|r}
\hline n & \text{相対誤差} \\
\hline 10 & 1.42857 \times 10^{-1} \\
10^{2} & 6.32911 \times 10^{-3} \\
10^{3} & 7.78816 \times 10^{-4} \\
10^{4} & 5.60852 \times 10^{-5} \\
10^{5} & 6.57068 \times 10^{-6} \\
10^{6} & 5.39015 \times 10^{-7} \\
10^{7} & 6.09226 \times 10^{-8} \\
10^{8} & 6.60877 \times 10^{-9} \\
10^{9} & 4.66978 \times 10^{-10} \\
10^{10} & 6.27241 \times 10^{-11} \\
10^{11} & 5.67875 \times 10^{-12} \\
10^{12} & 6.05238 \times 10^{-13} \\
10^{13} & 5.57072 \times 10^{-14} \\
10^{14} & 5.89722 \times 10^{-15} \\
10^{15} & 5.49235 \times 10^{-16} \\
10^{16} & 5.78194 \times 10^{-17} \\
10^{17} & 4.22560 \times 10^{-18} \\
10^{18} & 7.97008 \times 10^{-19} \\
10^{19} & 1.19037 \times 10^{-18} \\
10^{20} & 1.17502 \times 10^{-18} \\
\hline
\end{array}$$この後さらに計算を進めていくと大体$10^{-19}$オーダーで相対誤差の減少が頭打ちになります。とはいえ $\small \left\lfloor n \log _{10}\dfrac{n}{e}\right\rfloor$ という単純な式でもかなり高精度な近似式になっていることが分かります。

また、スターリングの公式によって求められる$n!$の桁数の概算値は $n=10^{16}$ 程度までほとんど誤差がありません。ただ、この大きさの$n$について階乗を計算する機会はまず無いでしょうが・・・。

 

 実際のところ

「階乗の桁数の近似式」と聞くと何だか凄そうな気がしてしまいますが、実際には$n!$の近似式に常用対数を取っただけに過ぎません。$a_n$は高精度な近似式と言えますが、$n! \approx \sqrt{2\pi n}\left({\dfrac {n}{e}}\right)^{n}$ の両辺に常用対数を取って作る式の方が高精度です。実際、$$\left\lfloor \dfrac{1}{2}\log_{10}(2\pi n)+n\log_{10}\dfrac {n}{e} \right\rfloor +1$$という式は大体 $2 \leqq n \leqq 10^{16}$ の範囲では$n!$の真の桁数を与えることができます。今回紹介した$a_n$はその簡略化バージョンという訳ですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です