MTToolBox  0.2.10
period.hpp
[詳解]
1 #ifndef MTTOOLBOX_PERIOD_HPP
2 #define MTTOOLBOX_PERIOD_HPP
3 
26 #include <stdint.h>
27 #include <NTL/GF2X.h>
28 #include <NTL/vector.h>
30 #include <MTToolBox/util.hpp>
31 
32 namespace MTToolBox {
55  template<typename U> void
56  minpoly(NTL::GF2X& poly, AbstractGenerator<U>& generator, int pos = 0,
57  int stateSize = 0)
58  {
59  using namespace std;
60  using namespace NTL;
61 
62  Vec<GF2> v;
63  int size;
64  if (stateSize <= 0) {
65  size = generator.bitSize();
66  } else {
67  size = stateSize;
68  }
69  v.SetLength(2 * size);
70  for (int i = 0; i < 2 * size; i++) {
71 // v[i] = (generator.generate() >> pos) & 1;
72  v[i] = getBitOfPos(generator.generate(), pos);
73  }
74  MinPolySeq(poly, v, size);
75  }
76 
96  bool isMexp(uint32_t degree);
97 
113  bool isIrreducible(const NTL::GF2X& poly);
114 
139  bool isPrime(const NTL::GF2X& poly);
140 
170  bool isPrime(const NTL::GF2X& poly, int degree,
171  const NTL::Vec<NTL::ZZ>& prime_factors);
172 
202  bool isPrime(const NTL::GF2X& poly,
203  int degree, const char * prime_factors[]);
204 
227  bool hasFactorOfDegree(NTL::GF2X& poly, long degree);
228 }
229 #endif // MTTOOLBOX_PERIOD_HPP
bool hasFactorOfDegree(NTL::GF2X &poly, long degree)
指定された次数の原始多項式がpolyの因数分解に含まれているか判定する。
疑似乱数生成器
Definition: AbstractGenerator.hpp:48
void minpoly(NTL::GF2X &poly, AbstractGenerator< U > &generator, int pos=0, int stateSize=0)
最小多項式を求める
Definition: period.hpp:56
virtual int bitSize() const =0
内部状態空間のビットサイズを返す。
GF(2)線形疑似乱数生成器の抽象クラス
bool isIrreducible(const NTL::GF2X &poly)
既約判定
unsigned int getBitOfPos(U bits, int pos)
特定位置のビットを求める SIMD型は、そのSIMD型のファイルでこのテンプレートを特殊化する。 ...
Definition: util.hpp:609
ユーティリティ関数群
bool isMexp(uint32_t degree)
2degree -1 が素数となるかどうかを返す
virtual U generate()=0
内部状態を次状態に遷移し、疑似乱数をひとつ出力する。
bool isPrime(const NTL::GF2X &poly)
原始性判定
MTToolBox の名前空間