階乗

数学において非負整数 n}} の階乗'//mvar'// は、1 から n}} までの全ての整数の積である。例えば、

である。空積の規約のもと 0! =}} 1}} と定義する。

階乗は数学の様々な場面に出現するが、特に組合せ論、代数学、解析学などが著しい。階乗の最も基本的な出自は n}} 個の相異なる対象を1列に並べる方法の総数が //n//!}} 通りであるという事実である。

階乗の定義は、最も重要な性質を残したまま、非整数を引数とする函数に拡張することができる。そうすれば解析学における著しい手法などの進んだ数学を利用できるようになる。

1. 定義
-----

いくつか同値な条件により定義することが可能である。

再帰的な定義
微分に関する「冪の微分法則」を用いた定義
//n//! = 上記の何れの定義においても、

となることが織り込み済みである空集合から空集合への全単射は空写像ただ1つ存在する。}}。このように定義することの理由は: など様々に挙げることができる。

より進んだ数学においては、引数が非整数の場合にも階乗函数を定義することができる。そういった一般化された定義のもとでの階乗は関数電卓や、Maple や Mathematica などの数学ソフトウェアで利用できる。

1.1. プログラミング言語における階乗
--------------------

多くのプログラミング言語において、再帰的な定義を利用し、プロシージャの再帰呼び出しを用いた階乗の実装が可能である。

以下はC言語での例である。例示するコードではunsigned long long型を使用しているが、unsigned long long型では小さな階乗でもオーバーフローしてしまうため、大きな階乗については任意精度演算による実装を検討すべきである。 unsigned long long factorial { if  return n * factorial; return 1; // 0! == 1 }

2. 組合せ論
-------

階乗を含む公式は数学の多くの分野に現れるけれども、階乗のおおもとの出自は組合せ論にある。相異なる n}} 個の対象の順列の総数は //n//!}} 通りである。

階乗はしばしば「順番を無視する」という事実を反映するものとして分母に現れる。古典的な例としては n}} 個の元から k}} 個の元を選ぶ組合せの総数が挙げられる。このような組合せは順列から得ることができる。実際、k}}-順列の総数

において、順番のみが違うk}}-順列が //k//   !}} 通りずつ存在するから、k}}-組合せの総数は

となる。この数は、二項冪 //n//}} における Xsup の係数となることから、二項係数 とも呼ばれる。

代数学に現れる階乗にはいくつも理由があるが、既述の如く二項展開の係数として現れたり、ある種の演算の対称化 において置換による平均化を行うなど、組合せ論的な理由で現れるものもある。

微分積分学においても階乗は例えばテイラー級数の分母として現れるが、これは冪函数 xsup の n}} 階導函数が //n//   !}} であることを補正する定数である。確率論でも階乗は用いられる。

階乗は数式操作にも有効である。例えば n}} の k}}-順列の総数を

と書けば、二項係数の対称性

を見るには都合がよい。

3. 数論における階乗
-----------

階乗は数論にも多くの応用を持つ。特に //n//   !}} は n}} 以下の全ての素数で整除されねばならない。このことの帰結として、//n// ≥ 5}} が合成数となる必要十分条件は

が満たされることである。より強い結果としてウィルソンの定理は

が p}} が素数であるための必要十分条件であることを述べる。

ルジャンドルの公式は //n//   !}} の素因数分解に現れる p}} の重複度が

であることを示す。これは

と書いてもよい。ただし、//s//sub は n}} の p}} 進展開の係数の和である。

//n//   !}} が素数となる n}} は 2}} のみである。//n//! ± 1}} の形の素数は階乗素数と呼ばれる。

1!}} より大きな階乗は全て偶数である。同様に、5!}} より後の階乗は 10}} の倍数であり、十進展開の末尾の零。

3.1. ブロカールの問題
-------------

ブロカールの問題とは、

を満たす n, m}} は存在するか、という問題である。2015年9月現在、これを満たす }} の組このような mathは

, , しか見つかっていない。ABC予想が真であれば、解は有限個しかないことが、Marius Overholt により示されている。

4. 階乗の解析学
---------

4.1. 階乗の逆数和
-----------

階乗の逆数の総和は収束級数

を与える。この和は無理数となるけれども、階乗に適当な正整数を掛けて和が有理数となるようにすることができる。例えば、

この級数の値が 1 となることを見るには、その部分和が 1 − 1/! であることを確認すればよい。したがって、階乗数の全体は無理列を成さない。

4.2. 階乗の増大度
-----------

n}} が増えるにつれて、階乗 //n//   !}} は n}} を変数とする任意の多項式函数あるいは指数函数よりも早く増加する。

//n//   !}} の近似式の多くは自然対数

であることを利用する。もっとも単純に得られる log}} の近似値を評価する式は、上記の式と以下の積分:

によって与えられる。積分を評価すれば

を得る。これは、ランダウの記号を用いれば log}} のオーダーは Θ}} であることを言っているのであり、この結果はソートアルゴリズムの計算量を測るのに重要な役割を果たす。さて上記の log}} の評価から

がわかる。実用上はより弱い結果だがより評価のしやすいものを用いることもある。上記の式から簡単な評価をしてみると、任意の n}} に対して sup であり、また //n// ≥ 6}} のとき //n//! < sup であることなどが分かる。

大きな n}} に対して //n//   !}} をよりよく評価するにはスターリングの公式

を利用する。実は任意の n}} に対して

であることが証明できる杉浦。

log}} の別な近似はシュリニヴァーサ・ラマヌジャンにより

したがって

と与えられている。この近似の誤差は、スターリングの公式よりも小さい。

5. 連続変数への補間
-----------

5.1. ガンマ関数とパイ関数
---------------

負の整数を除けば、階乗関数は非整数の値に対しても定義することができるが、そのためには解析学の道具立てが必要である。そのように階乗の値を「補間」して得られるものの一つがガンマ函数 Γ}} である。これは負の整数を除く任意の複素数 z}} に対して定義される。z}} の実部が正である場合には

で与えられる。ガンマ函数と階乗との関係は、任意の自然数 n}} に対して

が成り立つことである。オイラーのもともとの定義式は

である。ガウスの導入した別表記として、負でない実数 z}} に対するパイ函数 Π}} は

を満たす。ガンマ函数との関係は

である。非負整数 n}} に対し

が成り立つことを思えば、こちらのほうが階乗を補完した函数としては適していると言えるかもしれない。さてパイ函数は階乗が満たすのと同じ漸化式

を、しかし定義される限り任意の複素数 z}} に対して満たす。事実としてはこれはもう漸化式ではなくて函数等式と見るべきものであるが。この函数等式をガンマ函数に関するものに書き換えれば

となる。階乗を延長したものがパイ函数なのだから、定義可能な任意の複素数 z}} に対して

と定めることは可能である。これらの補間函数を用いて半整数における階乗の値を定めるならば、例えば

が成り立ち、さらに自然数 //n//   ∈   N}} に対して

が得られる。例えば

同様に //n//   ∈   N}} に対して

が成り立ち、例えば

パイ函数が殆ど全ての複素数値に対して定義される階乗の延長として唯一のものでないことはもちろんである。それは定義域において解析的としても同じことである。しかし、ふつうはこれが階乗の複素函数への最も自然な延長であるものと考える。例えば、ボーア・モレルップの定理はガンマ函数が Γ =}} 1}} かつ函数等式 Γ =}} //n//Γ}} を満足する、ガウス平面の全域で有理型かつ実軸の正の部分で対数凸となるような唯一の函数であることを述べる。同様の主張はパイ函数に関しても、函数等式 Π =}} //n//Π}} に関して述べられる。

そうは言うものの、解析的函数論の意味で恐らくより簡明な、階乗の値を補間する複素函数は存在する。例えばアダマールの「ガンマ」函数はガンマ函数とは異なり整函数になる。

オイラーはまた非整数の階乗に対する近似無限乗積

についても考察している。これは上記のガンマ函数に関する公式と同じものと見做すことができる。しかしこの公式は収束が遅く、実用的な意味でパイ函数やガンマ函数の値を計算することに利用することはできない。

5.2. ガウス平面上での挙動
---------------

複素変数の階乗の値をガンマ函数による表現を通して評価することができる。絶対値 ρ}} と偏角 φ}} を用いて

と書けば、絶対値一定曲線 ρ =}} }} と偏角一定曲線 φ =}} }} を等値線として格子を描くことができる。一定間隔で引いた等値線の間にさらに細かく等値線を引けば、それが補間で得られる値である。極である負の整数においては絶対値と偏角が定義できず、またその周辺で等値線は密になる。

!}}//z//!}} < 1}} に対してはテイラー展開

が利用できる。この展開のより多くの項は、Sageのような計算機代数システムで計算できる。

5.3. 階乗の近似
----------

大きな値に対する階乗の値の近似をディガンマ函数の積分を通じて連分数表示を用いて記述できる。この方法はスティルチェスによるもので、//z//! =}} exp)}} と書けば //P//}} は

で、スティルチェスはこの第一項 //p//}} の連分数展開

を与えた。

さて、任意の複素数 //z// ≠ 0}} に対して log =}} //P//}} あるいは log) =}} //P//}} とするのは誤りでありdate=February 2015}}、実際には実軸の近くの特定の範囲の z}} でしか成り立たない