-
C++
C++ | 素因数分解
C++ で素因数分解をするサンプルコードを紹介します。素因数分解とは、ある整数を、素数の掛け算に分解する手法です。 素因数分解のためには、まず素数列が必要です。以前の記事で掲載した素数ジェネレータクラス PrimeNumberGenerator を利用します。 ア... -
C++
C++ | 素数ジェネレータの実装例
C++ での素数ジェネレータの実装例を紹介します。 PrimeNumberGenerator のクラスインスタンスを生成し、 ()演算子を呼び出すことで無限に素数を生成することができます。 #include <iostream> #include <vector> class PrimeNumberGenerator ... -
C++
C++ | ユークリッド互除法で最大公約数を求める
整数アルゴリズムの伝統的なものに、ユークリッド互除法があります。2つの整数をインプットとし、これらの最大公約数を求めるものです。 再帰アルゴリズムのサンプルとしても、よく参照されます。 C++ でのサンプルコードを掲載します。 #include <ios... -
C++
C++ | 自然スプライン補間(三次スプライン補間)
二次元平面において、任意の点列を補間するアルゴリズムが多種あります。その中でも、自然スプライン補間では、各点を滑らかに結合することのできるアルゴリズムです。 三次スプラインで生成した曲線には次のような特徴があります。 インプットとなる点を... -
C++
C++ | 行列をLU分解する
LU分解とは、ひとつの正方行列を、下三角行列L と上三角行列U の2つの積に分解するアルゴリズムです。2つの行列に分解することにより、連立一次方程式の解や行列式の計算が容易になるメリットがあります。 例えば、3x3 行列であれば、次のような分解を行... -
C++
C++ | for 文における size_t インデックスのデクリメントループ
C++ の for ループには、伝統的に int が利用されることが多いです。しかし、配列へのインデックスのレンジを指定する目的を考えると、size_t 型を使用するべき場面も多々あります。 size_t 型のインデックスで for 文を記述する場合、インクリメント方式... -
C++
コンパイラの C++ バージョン確認方法【gcc, clang, Visual Studio】
C++ には国際規格のバージョンがいくつかあります。おおよそ規格の出版年に応じて命名されており、次のようなものがあります。 C++98 C++03 C++11 C++14 C++17 C++20 C++11 で大きな改定が行われており、これ以降のバージョンはモダン C++ と呼ばれたりし... -
C++
C++ | vector を乱数で初期化する
C++ にて vector を乱数で初期化するためのサンプルコードです。 一様乱数で初期化 長さ10の vector を、メルセンヌツイスターの一様乱数で初期化する例です。ここでは、0.0 以上 1.0 未満の乱数を生成しています。 #include <algorithm> #include... -
C++
C++ | ガウス・ジョルダン消去法で逆行列を求める
前回の記事ではガウス消去法のアルゴリズムを紹介しました。当アルゴリズムの派生で、ガウス・ジョルダン消去法というのがあります。 ガウス消去法では、前進消去と後退代入と2つの処理ステップで構成されます。ガウス・ジョルダン消去法では、前進消去と... -
C++
C++ | ガウス消去法で逆行列や連立一次方程式の解を求める
ガウスの消去法とは、行列を対角行列に変換することで、逆行列や連立一次方程式の解を求めるアルゴリズムです。別名掃き出し法とも言います。 この記事では C++ での実装例を掲載します。 ガウス消去法の実装サンプル ガウス消去法の実装サンプルを紹介し...