Boost多倍長整数ライブラリで大きな数の階乗を計算する方法
大きな数の階乗を求めたい場合、C++の標準的な long long 型(64ビット)ではすぐに桁あふれが発生してしまいます。そこで役立つのが Boost ライブラリです。Boost の multiprecision(多倍長精度)ライブラリを利用すれば、64ビットを超える高精度な数値計算が可能になり、非常に大きな階乗の値も正確に求めることができます。
実装例
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
using boost::multiprecision::cpp_int;
using namespace std;
cpp_int Large_Fact(int number) {
cpp_int fact = 1;
for (int i = 1; i <= number; i++)
fact *= i;
return fact;
}
main() {
int number = 100;
cpp_int fact = Large_Fact(number);
cout << fact << endl;
}
コードの解説
boost/multiprecision/cpp_int.hpp をインクルードすることで、任意精度の整数型 cpp_int が使えるようになります。Large_Fact 関数では、cpp_int 型の変数 fact を 1 で初期化し、1 から引数 number までの値を順に掛け合わせて階乗を計算しています。桁あふれを気にする必要がないため、100! のような巨大な値でも正確に求められます。
出力結果
9332621544394415268169923885626670049071596826438162146859296389521759999322 9915608941463976156518286253697920827223758251185210916864000000000000000000 000000
上記の出力は 100!(100の階乗)の値です。158桁にも及ぶこの巨大な数値は、通常の 64 ビット整数型では表現できませんが、cpp_int を使えば問題なく扱うことができます。
-
Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方
階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。方法1:forループを使うforループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換
-
Pythonで再帰関数を使って階乗を計算する方法を解説
ある数の階乗(Factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。たとえば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。再帰関数(Recursive Function)とは、自分自身を呼び出す関数のことを指します。この仕組みを使うと、階乗のように同じ処理を繰り返し行う計算を、シンプルで読みやすいコードで実装できます。再帰による階乗の計算例次のプログラムでは、factorial() 関数が引数を1つ受け取り、値を1ずつ減らしながら自分自身を呼び出します。そして引数が1に達した時点で呼び出しを終了し、結果を順番に掛け合わせて返します。de