Python|階乗を計算する:math.factorial()

1. はじめに

この記事では、Python|階乗を計算する:math.factorial() 関数について解説します。
階乗とは、1からその数までの連続した整数をすべて掛け合わせた値のことで、数学や統計、組み合わせ計算などで頻繁に使われます。
Pythonの math.factorial() を使うと、複雑なループを自分で書かずに簡単に階乗を求めることができます。

この記事を読むと、階乗の基本概念から、math.factorial() の使い方実務での応用例まで理解できます。

 

2. Pythonの math.factorial() 関数の基本

math.factorial() は Python 標準ライブラリ math モジュールに含まれる関数で、引数に整数を渡すと、その数の階乗を返します。
階乗は n! と表記され、たとえば 5! は 5 × 4 × 3 × 2 × 1 = 120 です。

math.factorial() の基本構文

import math

# 5の階乗を求める
result = math.factorial(5)
print(result)

実行結果:

120

ポイント

  • math モジュールを import する必要があります。
  • 引数は 0以上の整数 である必要があります。
  • 負の数や小数を渡すとエラーになります。

 

3. よくある使い方・応用例

math.factorial() は単なる数学的計算だけでなく、組み合わせや順列の計算アルゴリズムの実装にも役立ちます。

3-1. 順列の計算

順列(Permutation)は、異なるn個のものからr個を並べる方法の数で、nPr = n! / (n-r)! で求められます。

import math

# nPr を計算する関数
def permutation(n, r):
    return math.factorial(n) // math.factorial(n - r)

print(permutation(5, 3))  # 5P3

実行結果:

60

3-2. 組み合わせの計算

組み合わせ(Combination)は、n個の中から順番を考慮せずにr個を選ぶ方法の数で、nCr = n! / (r! × (n-r)!) で求められます。

import math

# nCr を計算する関数
def combination(n, r):
    return math.factorial(n) // (math.factorial(r) * math.factorial(n - r))

print(combination(5, 3))  # 5C3

実行結果:

10

3-3. 実務での応用例

  • 統計学での組み合わせ計算
  • 確率計算(トランプ、サイコロ、抽選など)
  • 再帰関数や動的計画法の理解を深める教材
  • アルゴリズムや数学コンテストの問題解答

 

4. 注意点・エラー対策

math.factorial() は非常に便利ですが、いくつかの注意点があります。

4-1. 負の数を渡すとエラー

import math

# 負の数を渡す例
print(math.factorial(-3))

実行結果:

ValueError: factorial() not defined for negative values

階乗は0以上の整数でしか定義されないため、負の数を渡すと ValueError が発生します。

4-2. 小数を渡すとエラー

import math

# 小数を渡す例
print(math.factorial(4.5))

実行結果:

ValueError: factorial() only accepts integral values

引数は整数でなければならず、小数を渡すとエラーになります。整数に変換する場合は int() を使いましょう。

4-3. 大きな数の計算は時間とメモリに注意

例えば math.factorial(100000) のような大きな数の階乗は計算時間がかかり、メモリも大量に使用します。実務では必要な範囲で計算することを心がけましょう。

 

5. まとめ

今回は Python の math.factorial() 関数 について解説しました。

  • math.factorial() は階乗を簡単に求められる便利な関数
  • 0以上の整数のみ受け付ける
  • 順列・組み合わせ・確率計算など幅広く応用可能
  • 大きな数の計算には注意が必要

学習のコツとして、まずは小さい数で試してから実務的な計算に応用すると理解が深まります。
統計や確率を扱う場面で、この関数は非常に役立ちます。

タイトルとURLをコピーしました