数学の基本計算として知られる「階乗」は、Pythonを使用すれば簡単に計算することができます。
本記事では、そんなPython基礎となる階乗の計算について、詳しくご説明します。
階乗
階乗(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(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!