MTToolBox  0.2.10
AlgorithmRecursionSearch.hpp
[詳解]
1 #ifndef MTTOOLBOX_ALGORITHM_RECURSION_SEARCH_HPP
2 #define MTTOOLBOX_ALGORITHM_RECURSION_SEARCH_HPP
3 
28 #if defined(DEBUG)
29 #include <iostream>
30 #endif
31 #include <NTL/GF2X.h>
32 #include <NTL/GF2XFactoring.h>
35 #include <MTToolBox/period.hpp>
36 #include <MTToolBox/util.hpp>
37 
38 namespace MTToolBox {
39  using namespace std;
73  template<typename U, typename V = U>
75  public:
103  AbstractGenerator<V>& bg) {
104  rand = &generator;
105  baseGenerator = &bg;
106  count = 0;
108  }
109 
139  const AlgorithmPrimitivity& primitivity) {
140  rand = &generator;
141  baseGenerator = &bg;
142  count = 0;
143  isPrime = &primitivity;
144  }
145 
176  bool start(int try_count) {
177  long size = rand->bitSize();
178  long degree;
179  for (int i = 0; i < try_count; i++) {
180  rand->setUpParam(*baseGenerator);
181  rand->seed(getOne<U>());
182  minpoly(poly, *rand);
183  count++;
184  degree = deg(poly);
185  if (degree != size) {
186 #if defined(DEBUG)
187  cout << "degree:" << degree << endl;
188 #endif
189  continue;
190  }
191  if ((*isPrime)(size, poly)) {
192  return true;
193  }
194  }
195  return false;
196  }
197 
212  const std::string getParamString() {
213  return rand->getParamString();
214  }
215 
235  const NTL::GF2X& getMinPoly() const {
236  return poly;
237  }
238 
250  long getCount() const {
251  return count;
252  }
253 
254  private:
256  AbstractGenerator<V> *baseGenerator;
258  NTL::GF2X poly;
259  long count;
260  };
261 }
262 #endif // MTTOOLBOX_ALGORITHM_RECURSION_SEARCH_HPP
void minpoly(NTL::GF2X &poly, AbstractGenerator< U > &generator, int pos=0, int stateSize=0)
最小多項式を求める
Definition: period.hpp:56
原始多項式かどうか判定するアルゴリズムを提供するクラス
Definition: AlgorithmPrimitivity.hpp:42
AlgorithmRecursionSearch(RecursionSearchable< U, V > &generator, AbstractGenerator< V > &bg)
コンストラクタ
Definition: AlgorithmRecursionSearch.hpp:102
const AlgorithmPrimitivity MersennePrimitivity
状態空間のビットサイズがメルセンヌ指数の疑似乱数生成器の 最小多項式の原始性を判定するアルゴリズム ...
const std::string getParamString()
疑似乱数生成器のパラメータを表す文字列を返す このメソッドは start() が true を返した場合にのみ呼び出...
Definition: AlgorithmRecursionSearch.hpp:212
状態遷移関数のパラメータを探索する。
Definition: AlgorithmRecursionSearch.hpp:74
long getCount() const
このインスタンスが作られてからstart() が終了するまでに試行した回数を返す。
Definition: AlgorithmRecursionSearch.hpp:250
const NTL::GF2X & getMinPoly() const
最小多項式を返す このメソッドは start() が true を返した場合にのみ呼び出すべきである。 ...
Definition: AlgorithmRecursionSearch.hpp:235
AlgorithmRecursionSearch(RecursionSearchable< U, V > &generator, AbstractGenerator< V > &bg, const AlgorithmPrimitivity &primitivity)
コンストラクタ
Definition: AlgorithmRecursionSearch.hpp:137
ユーティリティ関数群
このクラスは状態遷移パラメータ探索を行えるGF(2)線形疑似乱数生 成器のクラスである。 ...
Definition: RecursionSearchable.hpp:43
最小多項式の計算と原始性の判定
原始多項式判定
bool isPrime(const NTL::GF2X &poly)
原始性判定
bool start(int try_count)
状態遷移パラメータの探索を開始する
Definition: AlgorithmRecursionSearch.hpp:176
MTToolBox の名前空間