Orthogonal Array Library  1.0.0
Libray for generating orthogonal arrays based on Art Owen's oa library
All Classes Namespaces Files Functions Variables Typedefs Macros Pages
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