Pythonで巨大な数の階乗を計算するプログラム
非常に大きな数 n の階乗を求めたい場面は、プログラミングにおいてよくあります。
他の多くのプログラミング言語では、大きな数の階乗は整数データ型(int型など)の表現範囲を簡単に超えてしまうため、そのままでは計算できず、特別なライブラリや多倍長整数の実装が必要になります。
しかし、Python には整数の桁あふれという概念がありません。Pythonは整数の大きさを自動的に検出し、必要に応じて内部的により大きな整数表現へと拡張してくれるため、標準ライブラリだけで任意の大きさの階乗を簡単に計算できます。
例えば、入力が n = 50 の場合、出力は次のようになります。
30414093201713378043612608166064768844377641568960512000000000000
解決の手順
- 標準ライブラリ
mathからfactorial関数をインポートします。 - どれほど大きな値であっても、
nを引数として渡すだけで階乗を計算できます。
実装例
以下のコードで実際の動作を確認してみましょう。
from math import factorial def solve(n): return factorial(n) n = 50 print(solve(n))
入力
50
出力
30414093201713378043612608166064768844377641568960512000000000000
補足:math.factorial の特徴
math.factorial() は C 言語レベルで最適化されており、純粋な Python ループで階乗を計算するよりも高速です。また、引数が負の数の場合は ValueError が発生するため、事前に値の妥当性をチェックしておくと安全です。
-
Pythonプログラムで数の偶数の約数の合計を求める方法
この記事では、以下の問題文に対する解決策について詳しく解説します。 問題文:ある数が与えられたとき、その数のすべての偶数の約数(因子)の合計を求めて表示します。 アプローチ まず、与えられた数が奇数であるかどうかを確認します。奇数には偶数の約数が存在しないため、その場合は 0 を返します。 数が偶数である場合は、実際の計算に進みます。ここでのポイントは、20(つまり1)以外のすべての項を掛け合わせることで、偶数の約数の合計が得られるという点です。 偶数の約数からすべての奇数を取り除くために、20 に相当する「1」を無視します。この処理を行うことで、残るのは偶数の約数のみとなります。なお、2 は
-
Pythonで数値の階乗を計算するプログラム:再帰と反復の2つのアプローチを解説
本記事では、与えられた問題文に対する解決策とアプローチについて学びます。 問題の定義 問題文: n の階乗(factorial)を計算することがタスクです。 非負整数 n の階乗は、以下のように定義されます。 n! = n × (n-1) × (n-2) × (n-3) × … × 3 × 2 × 1 例えば、6 の階乗は「6! = 6 × 5 × 4 × 3 × 2 × 1 = 720」となります。また、0 の階乗は定義により 1 とみなされます。 この問題には、主に以下の2つの解法があります。 再帰的アプローチ(Recursive) 反復的アプローチ(Iterative) アプローチ1