C++で乱数を生成する方法をわかりやすく解説
C++で乱数を生成する方法を紹介します。ここでは、0から指定した最大値までの範囲で乱数を生成します(このプログラムでは最大値を100としています)。
乱数を生成する際に使用するのが srand() 関数です。この関数はC標準ライブラリに含まれており、void srand(unsigned int seed) という形式で、rand関数が使用する乱数生成器にシード(種)を設定します。
srand()関数の宣言
void srand(unsigned int seed)
srand()関数は seed というパラメータを1つ受け取ります。これは、疑似乱数生成アルゴリズムのシードとして使用される整数値です。戻り値はありません。
rand()関数で乱数を取得する
実際に乱数を取得するには rand() 関数を使用します。0からmaxまでの範囲の数値を得るには、剰余演算子(%)を使って余りを求めます。例えば rand() % 100 とすれば、0〜99の範囲の整数が得られます。
シードにtime(0)を使う理由
シード値には、time(0) 関数の戻り値をsrand()関数に渡しています。time(0)は現在の時刻を秒単位で返すため、プログラムを実行するたびに異なるシードが設定され、実行ごとに異なる乱数列が得られます。もしシードを固定すると、毎回同じ乱数が生成されてしまうので注意が必要です。
サンプルコード
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
int max;
max = 100; // 乱数を生成する上限値を設定
srand(time(0));
cout << "The random number is: " << rand()%max;
return 0;
}
実行結果 1
The random number is: 51
実行結果 2
The random number is: 29
実行結果 3
The random number is: 47
このように、同じプログラムでも実行するたびに異なる乱数が出力されていることが確認できます。
補足:モダンC++での乱数生成
srand()とrand()は手軽に使える一方、生成される乱数の品質や分布に課題があります。C++11以降では <random> ヘッダーが提供されており、std::mt19937 や std::uniform_int_distribution を使うことで、より高品質で偏りの少ない乱数を生成できます。本格的な用途では、こちらの利用を検討するとよいでしょう。
-
C++で質素数(Frugal Number)を判定する方法【サンプルコード付き】
この記事では、正の整数 N が与えられたときに、その数が質素数(Frugal Number)であるかどうかを判定するプログラムを C++ で作成する方法を解説します。 質素数とは? 質素数(FRUGAL NUMBER)とは、その数自身の桁数が、素因数分解による表現の桁数よりも厳密に大きい数のことです。 例:625 の場合 625 を素因数分解すると 54 となります。 625 自身の桁数:3 桁 54 の表現の桁数:2 桁 3 は 2 よりも厳密に大きいため、625 は質素数です。 最初のいくつかの質素数:125、128、243、256、343、512、625 など 問題を理解するための具
-
C++で五胞体数(ペンタトープ数)を求める方法
五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の