Orthogonal Array Library  1.0.0
Libray for generating orthogonal arrays based on Art Owen's oa library
GaloisField.h
Go to the documentation of this file.
1 
14 #ifndef GALOISFIELD_H
15 #define GALOISFIELD_H
16 
17 #include "OACommonDefines.h"
18 #include "matrix.h"
19 #include "primes.h"
20 #include <assert.h>
21 
22 namespace oacpp {
27  {
28  private:
29  void fillAllPolynomials();
30  void computeSumsAndProducts();
31  void computeMultiplicativeInverse();
32  void computeNegative();
33  void computeRoots();
34  static std::vector<int> initializePowerCycle(int q);
35 
36  public:
38  int n;
40  size_t u_n;
42  int p;
44  int q;
46  size_t u_q;
48  std::vector<int> xton;
50  std::vector<int> inv;
52  std::vector<int> neg;
54  std::vector<int> root;
56  bclib::matrix<int> plus;
58  bclib::matrix<int> times;
60  bclib::matrix<int> poly;
61 
65  explicit GaloisField(int q);
66 
70  GaloisField();
71 
82  static void polyProd(int p, size_t u_n, const std::vector<int> & xton, const std::vector<int> & p1, const std::vector<int> & p2, std::vector<int> & prod);
83 
93  static void polySum(int p, size_t u_n, const std::vector<int> & p1, const std::vector<int> & p2, std::vector<int> & sum);
102  static int poly2int(int p, int n, const std::vector<int> & poly);
103 
107  void print();
108  };
109 } // end namespace
110 
111 #endif
oacpp::GaloisField::u_q
size_t u_q
field element vector lenth
Definition: GaloisField.h:46
oacpp::GaloisField::p
int p
prime modulus q=p^n
Definition: GaloisField.h:42
oacpp::GaloisField::print
void print()
Print a Galois field.
Definition: GaloisField.cpp:282
oacpp::GaloisField::q
int q
the order of the field q = p^n
Definition: GaloisField.h:44
oacpp::GaloisField::poly2int
static int poly2int(int p, int n, const std::vector< int > &poly)
Convert polynomial to integer in 0..q-1
Definition: GaloisField.cpp:266
oacpp
Orthogonal Array Namespace.
Definition: ak.h:39
oacpp::GaloisField
Class to define a Galois Field and Methods for operations.
Definition: GaloisField.h:27
oacpp::GaloisField::plus
bclib::matrix< int > plus
sum field of dimension u_q x u_q
Definition: GaloisField.h:56
oacpp::GaloisField::GaloisField
GaloisField()
Default Constructor.
Definition: GaloisField.cpp:216
primes.h
oacpp::GaloisField::poly
bclib::matrix< int > poly
polynomial field of dimenstion u_q x u_n
Definition: GaloisField.h:60
OACommonDefines.h
oacpp::GaloisField::times
bclib::matrix< int > times
product field of dimension u_q x u_q
Definition: GaloisField.h:58
oacpp::GaloisField::n
int n
prime modulus exponent q = p^n
Definition: GaloisField.h:38
oacpp::GaloisField::polyProd
static void polyProd(int p, size_t u_n, const std::vector< int > &xton, const std::vector< int > &p1, const std::vector< int > &p2, std::vector< int > &prod)
Multiplication in polynomial representation.
Definition: GaloisField.cpp:236
oacpp::GaloisField::polySum
static void polySum(int p, size_t u_n, const std::vector< int > &p1, const std::vector< int > &p2, std::vector< int > &sum)
Addition in polynomial representation.
Definition: GaloisField.cpp:225
oacpp::GaloisField::u_n
size_t u_n
polynomial vector length
Definition: GaloisField.h:40
oacpp::GaloisField::root
std::vector< int > root
root
Definition: GaloisField.h:54
oacpp::GaloisField::xton
std::vector< int > xton
characteristic polynomial of length u_n
Definition: GaloisField.h:48
oacpp::GaloisField::neg
std::vector< int > neg
row number of which row of poly is the negative (additive inverse) of this row of lenth u_q
Definition: GaloisField.h:52
oacpp::GaloisField::inv
std::vector< int > inv
Indicator of which row of poly is the multiplicative inverse of this row of length u_q.
Definition: GaloisField.h:50