【Python入門】階乗の計算|factorial()関数を学ぶ

階乗の計算|factorial()関数を学ぶ_アイキャッチ プログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

数学の基本計算として知られる「階乗」は、Pythonを使用すれば簡単に計算することができます。

本記事では、そんなPython基礎となる階乗の計算について、詳しくご説明します。

こんな人に読んでほしい
  • Python初心者の人
  • Pythonによる階乗の計算方法について学びたい人
levtech-ad

階乗

階乗(factorial)は\(n!\)で表され、下式のように\(1\)から\(n\)までのすべての整数の積です。

\(7!=7\times 6\times 5\times 4\times 3\times 2\times 1=5040\)

以下に、Pythonを使用した階乗の計算方法をご紹介します。

階乗関数の実装

階乗関数の実装例を以下にご紹介します。

#input
def F(x):
    if x == 0:
        return 1
    else:
        return x*F(x-1)
print("F(0)={}".format(F(0)))
print("F(3)={}".format(F(3)))
print("F(5)={}".format(F(5)))
print("F(7)={}".format(F(7)))
#output
F(0)=1
F(3)=6   
F(5)=120 
F(7)=5040

math.factorial()

mathモジュールのmath.factorial()を使用すると、指定した正数の階乗を計算することができます。

#input
import math

x1 = math.factorial(6)
x2 = math.factorial(8)
x3 = math.factorial(10)

print("6の階乗:{}".format(x1))
print("8の階乗:{}".format(x2))
print("10の階乗:{}".format(x3))
#output
6の階乗:720
8の階乗:40320
10の階乗:3628800

mpmath.factorial()

mpmathモジュールのmpmath.factorial()を使用すると、指定した正数の階乗を任意の精度で計算することができます。

#input
from mpmath import *
#精度4桁に設定
mp.dps = 4
x1 = factorial(5)
x2 = factorial(7)
x3 = factorial(9)

print("5の階乗:{}".format(x1))
print("7の階乗:{}".format(x2))
print("9の階乗:{}".format(x3))
#output
5の階乗:120.0
7の階乗:5040.0
9の階乗:3.629e+5

設定した4桁精度で出力されていることが分かるかと思います。

sympy.factorial()

SymPyのsympy.factorial()を使用すると、math.factorial()と同様に、指定した正数の階乗を計算することができます。

#input
import sympy

x1 = sympy.factorial(10)
x2 = sympy.factorial(11)
x3 = sympy.factorial(12)

print("10の階乗:{}".format(x1))
print("11の階乗:{}".format(x2))
print("12の階乗:{}".format(x3))
#output
10の階乗:3628800
11の階乗:39916800
12の階乗:479001600

scipy.special.factorial()

SciPyのscipy.special.factorial()を使用すると、指定した正数の階乗を近似計算することができます。

処理速度を優先させる場合には、第二引数は省略する(デフォルト)ことで、近似計算が実行されます。

正確な値を計算する場合には、第二引数に「True」を指定する必要があります。

#input
from scipy import special as sp

x1 = sp.factorial(30)
x2 = sp.factorial(30,True)

print("30の階乗(False):{}".format(x1))
print("30の階乗(True):{}".format(x2))
#output
30の階乗(False):2.652528598121911e+32
30の階乗(True):265252859812191058636308480000000

二重階乗

二重階乗(double factorial)は\(n!!\)で表され、下式のように\(1\)から\(n\)までの同じ偶奇性の数の積です。

\(7!=7\times 5\times 3\times 1=105\)

\(8!=8\times 6\times 4\times 2=384\)

以下に、Pythonを使用した二重階乗の計算方法をご紹介します。

mpmath.fac2()

mpmathモジュールのmpmath.fac2()を使用すると、指定した正数の二重階乗を計算することができます。

#input
from mpmath import *
#精度4桁に設定
mp.dps = 4
x1 = fac2(7)
x2 = fac2(8)

print("7の二重階乗:{}".format(x1))
print("8の二重階乗:{}".format(x2))
#output
7の二重階乗:105.0
8の二重階乗:384.0

sympy.factorial2()

SymPyのsympy.factorial2()を使用すると、mpmath.fac2()と同様に、指定した正数の二重階乗を計算することができます。

#input
import sympy

x1 = sympy.factorial(14)
x2 = sympy.factorial(15)

print("14の二重階乗:{}".format(x1))
print("15の二重階乗:{}".format(x2))
#output
14の二重階乗:87178291200
15の二重階乗:1307674368000

まとめ

この記事では、Python基礎となる階乗の計算方法について、ご説明しました。

本記事を参考に、ぜひ計算を試してみてください。

参考

Python学習用おすすめ教材

Pythonの基本を学びたい方向け

統計学基礎を学びたい方向け

Pythonの統計解析を学びたい方向け

おすすめプログラミングスクール

Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました