-
Park-Miller乱数生成アルゴリズムを実装するためのC++プログラム
Park-Miller乱数生成アルゴリズムは、乱数を生成するもう1つの方法です。 このタイプの乱数ジェネレーター(RNG)の一般式は、次のとおりです。X_ {k + 1} =g X(k)mod n モジュラスnが素数または素数の累乗である場合、乗数gはnをモジュロする高乗法の要素であり、シードX0はnと互いに素です。 アルゴリズム Begin Declare variables n, a, b, c and seed Read variables n, a, b, c and seed Uniform() &n
-
Naor-Reingold擬似ランダム関数を実装するC++プログラム
Naor-Reingold疑似乱数関数は、乱数を生成するもう1つの方法です。 MoniNaorとOmerReingoldは、1997年に、秘密鍵と公開鍵暗号のさまざまな暗号プリミティブの効率的な構成について説明しました。pとlをl|p-1の素数とします。乗法次数lの要素gεFp*を選択します。次に、各n次元ベクトルに対してa =(a 0 、a 1 、...、a n 。 それらは関数を定義します fa(x)=ga0.a1x1a2x2…..anxn ε Fp ここで、x =x 1 …xn は整数xのビット表現であり、0≤x≤2 n-1 こ
-
キャリー付き倍算法を使用して乱数を生成するC++プログラム
キャリー付き倍算方式は、Marsaglia and Zaman(1991)によって導入されたキャリー付き加算ジェネレーターの変形です。この方法の主な利点は、単純なコンピューター整数演算を呼び出し、約260〜22000000の範囲の巨大な周期を持つ乱数のシーケンスを非常に高速に生成できることです。 MWCでは、ベースbはコンピューターのワードサイズと乗数aに等しくなるように選択され、ラグrはモジュラスp =ab rを決定します。 -1。ここでは、モジュラスが素数で乗数の周期が長くなるようにaが選択されています。 アルゴリズム Begin Declare maximum _sequenc
-
NダイスローラーをエミュレートするC++プログラム
Nダイスローラーをエミュレートするコードは次のとおりです。これは、1〜6の乱数を生成することで実行できます。 アルゴリズム Begin Declare n Read n For i = 0 to n-1 do Generate sequence with rand() mod 6 + 1 Print the sequence Done End サンプルコード #include <iostream>
-
与えられた範囲の間で素数を生成するためにホイールシーブを実装するC++プログラム
Wheel Sieveメソッドは、特定の範囲の間の素数を見つけるために使用されます。ホイール因数分解は、エラトステネスのふるいの予備を手動で実行するためのグラフィカルな方法であり、素数をコンポジットから分離します。 この方法では、最も内側の円の素数は、他の円のそれ自体と同様の位置にそれらの倍数を持ち、素数とその倍数のスポークを形成します。最も内側の円のこれらの素数の倍数は、外側の円の合成数のスポークを形成します。 アルゴリズム Begin Define max number gen_sieve_primes() D
-
エラトステネスのふるいを実装して、指定された範囲の素数を生成するC++プログラム
これは、エラトステネスのふるいを実装して、指定された範囲間で素数を生成するC++プログラムです。この方法では、すべての要素を含む整数配列がゼロに初期化されます。 これは、ネストされたループ内で各非素元要素のインデックスが1としてマークされている場所に続きます。素数は、インデックスが0とマークされているものです。 アルゴリズム Begin Declare an array of size n and initialize it to zero Declare length, i, j Read length &nbs
-
ループ条件内のiostream::eofが間違っていると見なされるのはなぜですか?
ループ内のiostream::eofは、EOFに達していないため、間違っていると見なされます。したがって、次の読み取りが成功するという意味ではありません。 C++のファイルストリームを使用してファイルを読み取りたい場合。また、ループを使用してファイルに書き込む場合、stream.eof()を使用してファイルの終わりをチェックすると、実際にはファイルが終わりに達したかどうかをチェックしています。 サンプルコード #include<iostream> #include<fstream> using namespace std; int main() { ifstre
-
Linuxで実行されているC++コードをプロファイリングするにはどうすればよいですか?
Linuxプラットフォームには、C++プログラムをプロファイリングするための優れたプロファイリングツールが多数あります。 Valgrindはその1つです。広く使われています。これは、メモリデバッグ、メモリリーク検出、およびプロファイリングのためのプログラミングツールです。バイナリをValgrindに渡し、ツールをcallgrindに設定することで、Valgrindを使用できます。まず、プログラムをコンパイルしてバイナリを生成します $ g++ -o abc.cpp abc 次に、valgrindを使用してプロファイルを作成します $ valgrind --tool=callgrind ./a
-
C ++でのコピーの省略と戻り値の最適化とは何ですか?
コピーの省略は、コピーの省略とも呼ばれます。これは、コンパイラの最適化手法の1つです。オブジェクトの不要なコピーを回避します。現在のほとんどのコンパイラは、このCopyElision手法を使用しています。 1つのサンプルコードを使用して、どのように機能するかを見てみましょう。 サンプルコード #include <iostream> using namespace std; class MyClass { public: MyClass(const char* str = "\0") { //default constructor cou
-
与えられた範囲の間で素数を生成するためにアトキンのふるいを実装するC++プログラム
これは、指定された範囲間で素数を生成するためにSieveofAtkinを実装するC++プログラムです。アトキンのふるいは、指定された整数までのすべての素数を見つけるための最新のアルゴリズムです。 アルゴリズム Begin Create a results list, filled with 2, 3, and 5. Initialize the sieve array with false values Mark siev[n] is true if one of the following is true: &nb
-
与えられた範囲の間で素数を生成するためにセグメント化されたふるいを実装するC++プログラム
これは、セグメント化されたふるいを実装して、指定された範囲間で素数を生成するC++プログラムです。セグメント化されたふるいは、最初にSimple Sieveを使用して、√(n)以下の素数を見つけます。このアルゴリズムのアイデアは、範囲[0 ... n-1]を異なるセグメントに分割し、すべてのセグメントの素数を1つずつ計算することです。 アルゴリズム Begin Create function to find all primes smaller than limit using simple sieve of eratosthenes. &n
-
ライブラリがリンクされている順序によってGCCでエラーが発生することがあるのはなぜですか?
基本的に、この種のエラーは、コンパイルフェーズのリンカーから発生します。リンカのデフォルトの動作は、現在のプログラムで必要なときにアーカイブライブラリからコードを取得することです。 正しく機能するには、ライブラリが順番に存在している必要があります。それは「被呼者の前に発呼者」という形でそこになければならないと言うことができます。この問題は、フラグを使用してデフォルト以外の動作を選択することで解決できますが、このプロセスでは、リンクに時間がかかる場合があります。それ以外の場合は、ライブラリを正しく注文することで解決できます。ローダーとこれら2つを並べ替えると、順序を並べ替えて修正するのに役立ち
-
static_cast、dynamic_cast、const_cast、およびreinterpret_castはいつ使用する必要がありますか?
const_cast constを変数に削除または追加するために使用できます。これは、変数から定数を追加/削除する必要がある場合に役立ちます。 static_cast これは、通常/通常の型変換に使用されます。これは、暗黙的な型強制の原因となるキャストでもあり、明示的に呼び出すこともできます。 floatをintに、charをintに変換する場合などに使用する必要があります。 dynamic_cast このキャストは、ポリモーフィズムを処理するために使用されます。派生クラスにキャストする場合にのみ使用する必要があります。これは、基本クラスから派生クラスにキャストするときに継承で
-
#include <bits / stdc ++。h>を使用しないのはなぜですか?
はヘッダーファイルです。このファイルには、すべての標準ライブラリが含まれています。一部のコーディングコンテストでは、解決中に時間を節約する必要がある場合、このヘッダーファイルを使用すると便利です。 ソフトウェアエンジニアリングのアプローチでは、インクルードを最小化する必要があります。このヘッダーファイルを使用すると、多くのファイルが含まれますが、プログラムで必要とされない場合もあります。そのため、コンパイル時間とプログラムサイズが増える可能性があります。 このヘッダーファイルの大きな欠点のいくつかを以下に示します このは、GNUC++ライブラリの標準ヘッダーファイルではありません。そ
-
#include <filename>と#include“ filename”の違いは何ですか?
2つの形式の違いは、プリプロセッサが含まれるファイルを検索する場所にあります。 #include プリプロセッサは、実装に依存する方法で検索し、コンパイラによって事前に指定されたディレクトリを検索します。このメソッドは通常、標準ライブラリヘッダーファイルをインクルードするために使用されます。 #include filename プリプロセッサは、ディレクティブを含むファイルと同じディレクトリを検索します。これが失敗すると、#includeフォームのように動作し始めます。このメソッドは通常、独自のヘッダーファイルをインクルードするために使用されます。
-
与えられた数が素数であるかどうかをチェックするためのラビンミラー素数性テストを実装するC++プログラム
Rabin-Miller Primality Testは、指定された数値が素数であるかどうかを確認するために使用されます。これは、フォーマットの素数性とSolovay-Stressenテストに似ています。このテストは、ロシアの数学者M.M.Artjuhovによって最初に発見されました。 アルゴリズム Begin ll mulmod(ll a, ll b, ll m) ll x = 0,y = a mod m while (b > 0) if (b mod 2 == 1)
-
n個の数のGCDとLCMを見つけるためのC++プログラム
これは、n個の数のGCDとLCMを見つけるためのコードです。すべてがゼロではない2つ以上の整数のGCDまたは最大公約数は、各整数を除算する最大の正の整数です。 GCDは最大公約数としても知られています。 2つの数値の最小公倍数(LCM)は、両方の数値の倍数である最小公倍数(ゼロではない)です。 アルゴリズム Begin Take two numbers as input Call the function gcd() two find out gcd of n numbers Call the function l
-
サンダラムのふるいを使用して特定の範囲の間で素数を生成するC++プログラム
これは、サンダラムのふるいを実装して、指定された範囲間で素数を生成するC++プログラムです。このアルゴリズムは、1934年にSundaramによって発見されました。 アルゴリズム Begin printPrimes(n) Here we find out primes smaller than n, we reduce n-2 to half. We call it New. New = (n-2)/2; Create an array marked[n] that is going to be used to separate numbers of the
-
フェルマーの素数性テストを実行するC++プログラム
フェルマーの素数性テストは、与えられた数が素数であるかどうかをチェックするために実行されます。これがこのアルゴリズムのC++コードです。 アルゴリズム Begin modulo(base, e, mod) a = 1 b = base while (e > 0) if (e mod 2 == 1) a = (a * b) % mod &
-
2つの符号付き数値の乗算のためのブースの乗算アルゴリズムを実装するC++プログラム
ブースのアルゴリズムは、2つの符号付き2進数を2の補数表記で乗算する乗算アルゴリズムです。ブースでは、追加するよりもシフトが速い卓上計算機を使用し、速度を上げるためのアルゴリズムを作成しました。 アルゴリズム Begin Put multiplicand in BR and multiplier in QR and then the algorithm works as per the following conditions: 1. If Qn and Qn+1 are same i.e. 00 o