指定した範囲内の乱数シーケンスを生成するC++プログラム
C++には、あらかじめ用意されている乱数生成関数 rand() があります。この関数は <stdlib.h>(C++では <cstdlib>)ヘッダーファイルで宣言されており、指定した範囲内の乱数を生成するために使用されます。ここで、min_n は乱数の最小値(下限)、max_n は最大値(上限)を表します。
次の式を使うことで、min_n 以上 max_n 以下のランダムな整数を取得できます。
((rand() % (max_n + 1 - min_n)) + min_n)
例えば、下限と上限をそれぞれ 1 と 100 に設定した場合、この式は 1 から 100 までの範囲のランダムな整数を返します。
アルゴリズム
開始
max_n を整数型として宣言し、100 で初期化する。
min_n を整数型として宣言し、1 で初期化する。
new_n を整数型として宣言する。
i を整数型として宣言する。
「乱数:」というメッセージを出力する。
for (i = 0; i < 10; i++)
new_n = ((rand() % (max_n + 1 - min_n)) + min_n)
new_n の値を出力する。
終了。
サンプルコード
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
int max_n = 100;
int min_n = 1;
int new_n;
int i;
cout<<"The random number is: \n";
for (i = 0; i < 10; i++) {
new_n = ((rand() % (max_n + 1 - min_n)) + min_n);
// rand() はランダムな数値を返します
cout<<new_n<<endl;
}
return 0;
}
実行結果
The random number is:
42
68
35
1
70
25
79
59
63
65
補足:実行ごとに異なる乱数を得るには
rand() は擬似乱数を生成するため、シード値を設定しない限り、プログラムを実行するたびに同じ数列が出力されます。実行ごとに異なる乱数を得たい場合は、<ctime> ヘッダーを読み込み、ループの前に srand(time(NULL)); を呼び出してシードを現在時刻で初期化するのが一般的です。また、よりモダンなC++では <random> ヘッダーの mt19937 や uniform_int_distribution を使うことで、品質の高い乱数を簡単に生成できます。
-
指定した範囲内の素数を生成するホイールふるい(Wheel Sieve)のC++実装プログラム
ホイールふるい(Wheel Sieve)法は、指定された範囲内の素数を見つけるために用いられる手法です。ホイール因数分解(Wheel Factorization)は、エラトステネスのふるいの前処理を手作業で行うための図式的な方法であり、素数と合成数を効率的に分離します。 この手法では、最も内側の円に配置された素数は、外側の各円の同じ相対位置にその倍数を持つことになります。その結果、素数とその倍数が車輪のスポークのように放射状に並びます。内側の円にある素数の倍数は、外側の円において合成数のスポークを形成するのです。 アルゴリズム 開始 最大値(max number)を定義する
-
指定した次数列からグラフを生成するC++プログラムの実装方法
本記事では、与えられた次数列(degree sequence)をもとに無向グラフを構築するC++プログラムを紹介します。このアルゴリズムの時間計算量は O(v²) であり、自己ループや多重辺は含まれません。生成したグラフの構造は、隣接行列として出力されます。 アルゴリズムの手順 各頂点「i」を走査する外側のループを作成します。 頂点「i」より後ろにある各頂点「j」を調べる内側のループ(ネストされたループ)を作成します。 頂点「i」と頂点「j」の残り次数がどちらも0より大きい場合、両者を結ぶ辺を追加し、それぞれの次数を1ずつ減らします。 PrintMatrix() 関数を呼び出して、隣接行列を