Index: kefile
===================================================================
--- Makefile	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,26 +1,0 @@
-CXX = g++ -std=c++14 -Ofast
-
-HEADERS = util.H finitefield.H finitefield2.H fieldnumber.H polynomial.H
-
-SOURCES = util.C finitefield.C finitefield2.C fieldnumber.C polynomial.C
-
-OBJECTS = util.o finitefield.o finitefield2.o fieldnumber.o polynomial.o
-
-INCLUDE = -I.
-
-LIBS = -lstdc++
-
-TFF = test_finitefield
-TFN = test_fieldnumber
-
-default: obj
-
-tests: obj
-	$(CXX) $(INCLUDE) $(TFF).C -o $(TFF) $(LIBS)
-	$(CXX) $(INCLUDE) $(TFN).C -o $(TFN) $(LIBS)
-
-obj:
-	$(CXX) $(INCLUDE) -c $(SOURCES)
-
-clean:
-	$(RM) *.o *~
Index: eldnumber.C
===================================================================
--- fieldnumber.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,22 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-# include <fieldnumber.H>
Index: eldnumber.H
===================================================================
--- fieldnumber.H	(revision e627b6788dadc031467bbca122e1623b0db2d6ef)
+++ 	(revision )
@@ -1,237 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-/*
-  Este archivo contiene la definición e implementación de una plantilla de clase
-  para representar números enteros restringidos a un campo finito.
-
-  Creado por:        Alejandro J. Mujica
-  Fecha de creación: 
-*/
-
-
-# ifndef FIELDNUMBER_H
-# define FIELDNUMBER_H
-
-# include <iostream>
-
-/**
- * Plantilla que representa un número restringido a un campo.
- *
- * @tparam FieldT Tipo de campo a utilizar.
- *
- * @pre FieldT debe ser base de la plantilla FiniteField.
- *
- * @see FiniteField FiniteField2.
- *
- * @author Alejandro J. Mujica (amujica en cenditel punto gob punto ve).
- */
-template <class FieldT>
-class FieldNumber
-{
-public:
-  /// Tipo de campo que restringe al número.
-  using FieldType = FieldT;
-  /// Tipo de número restringido.
-  using NumberType = typename FieldType::NumberType;
-
-private:
-  FieldType  field;
-
-  NumberType value;
-
-public:
-  /// Constructor que funge de paramétrico y por omisión.
-  FieldNumber(const NumberType & _value = NumberType(0));
-
-  FieldNumber operator + (const FieldNumber &) const;
-
-  FieldNumber & operator += (const FieldNumber &);
-
-  FieldNumber operator - (const FieldNumber &) const;
-
-  FieldNumber & operator -= (const FieldNumber &);
-
-  FieldNumber operator * (const FieldNumber &) const;
-
-  FieldNumber & operator *= (const FieldNumber &);
-
-  FieldNumber operator / (const FieldNumber &) const;
-
-  FieldNumber & operator /= (const FieldNumber &);
-
-  bool operator == (const FieldNumber &) const;
-
-  bool operator != (const FieldNumber &) const;
-
-  bool operator < (const FieldNumber &) const;
-
-  bool operator <= (const FieldNumber &) const;
-
-  bool operator > (const FieldNumber &) const;
-  
-  bool operator >= (const FieldNumber &) const;
-
-  bool operator ! () const;
-
-  friend std::ostream & operator << (std::ostream & out, const FieldNumber & fn)
-  {
-    out << (NumberType) fn.value;
-    return out;
-  }
-
-  FieldNumber & operator ++ ();
-
-  FieldNumber & operator -- ();
-
-  /// Operador de casting para el tipo numérico base.
-  operator NumberType & ()
-  {
-    return value;
-  }
-};
-
-template <class FieldT>
-FieldNumber<FieldT>::FieldNumber(const NumberType & _value)
-  : field(), value(field(_value))
-{
-  // Empty
-}
-
-template <class FieldT> FieldNumber<FieldT>
-FieldNumber<FieldT>::operator + (const FieldNumber & fn) const
-{
-  FieldNumber ret;
-  ret.value = field.sum(value, fn.value);
-  return ret;
-}
-
-template <class FieldT> FieldNumber<FieldT> &
-FieldNumber<FieldT>::operator += (const FieldNumber & fn)
-{
-  *this = *this + fn;
-  return *this;
-}
-
-template <class FieldT> FieldNumber<FieldT>
-FieldNumber<FieldT>::operator - (const FieldNumber & fn) const
-{
-  FieldNumber ret;
-  ret.value = field.sub(value, fn.value);
-  return ret;
-}
-
-template <class FieldT> FieldNumber<FieldT> &
-FieldNumber<FieldT>::operator -= (const FieldNumber & fn)
-{
-  *this = *this - fn;
-  return *this;
-}
-
-template <class FieldT> FieldNumber<FieldT>
-FieldNumber<FieldT>::operator * (const FieldNumber & fn) const
-
-{
-  FieldNumber ret;
-  ret.value = field.mul(value, fn.value);
-  return ret;
-}
-
-template <class FieldT> FieldNumber<FieldT> &
-FieldNumber<FieldT>::operator *= (const FieldNumber & fn)
-{
-  *this = *this * fn;
-  return *this;
-}
-
-template <class FieldT> FieldNumber<FieldT>
-FieldNumber<FieldT>::operator / (const FieldNumber & fn) const
-{
-  FieldNumber ret;
-  ret.value = field.div(value, fn.value);
-  return ret;
-}
-
-template <class FieldT> FieldNumber<FieldT> &
-FieldNumber<FieldT>::operator /= (const FieldNumber & fn)
-{
-  *this = *this / fn;
-  return *this;
-}
-
-template <class FieldT> bool
-FieldNumber<FieldT>::operator == (const FieldNumber & fn) const
-{
-  return value == fn.value;
-}
-
-template <class FieldT> bool
-FieldNumber<FieldT>::operator != (const FieldNumber & fn) const
-{
-  return not (*this == fn);
-}
-
-template <class FieldT>
-bool FieldNumber<FieldT>::operator < (const FieldNumber & fn) const
-{
-  return value < fn.value;
-}
-
-template <class FieldT>
-bool FieldNumber<FieldT>::operator <= (const FieldNumber & fn) const
-{
-  return value <= fn.value;
-}
-
-template <class FieldT>
-bool FieldNumber<FieldT>::operator > (const FieldNumber & fn) const
-{
-  return value > fn.value;
-}
-
-template <class FieldT>
-bool FieldNumber<FieldT>::operator >= (const FieldNumber & fn) const
-{
-  return value >= fn.value;
-}
-
-template <class FieldT>
-bool FieldNumber<FieldT>::operator ! () const
-{
-  return value == NumberType(0);
-}
-
-template <class FieldT> FieldNumber<FieldT> &
-FieldNumber<FieldT>::operator ++ ()
-{
-  value = field.sum(value, 1);
-  return *this;
-}
-
-template <class FieldT> FieldNumber<FieldT> &
-FieldNumber<FieldT>::operator -- ()
-{
-  value = field.sub(value, 1);
-  return *this;
-}
-
-# endif // FIELD_NUMBER_H
-
Index: nitefield.C
===================================================================
--- finitefield.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,22 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-# include <finitefield.H>
Index: nitefield.H
===================================================================
--- finitefield.H	(revision e627b6788dadc031467bbca122e1623b0db2d6ef)
+++ 	(revision )
@@ -1,148 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-/*
-  Este archivo contiene la definición de una plantilla para basar
-  implementaciones de campos de Galois (campos finitos).
-
-  Creado por:        Alejandro J. Mujica
-  Fecha de creación: 
-*/
-
-# ifndef FINITEFIELD_H
-# define FINITEFIELD_H
-
-# include <random>
-# include <util.H>
-
-/** Plantilla base para crear especializaciones de Campos de Galois.
- *
- *  Contiene la interfaz que debe contener una clase particular de campo
- *  para poder usarla con la clase que representa un número dentro de un campo.
- *
- *  @tparam NumberT Tipo numérico que se va a restringir.
- *  @tparam P Valor constante que define la característica del campo.
- *  @tparam N Valor constante para la potencia a la cual se elevará la
- *            característica que definirá el tamaño del campo. Por lo tanto, 
- *            el tamaño del campo estará definido por @f$P^N@f$.
- *
- *  @pre NumberT debe ser un tipo de los enteros sin signo de la biblioteca
- *       estándar de C++
- *  @pre P > 0
- *  @pre N >= 0 
- *
- *  @see FiniteField2 FieldNumber
- */
-template <typename NumberT, unsigned short P, unsigned short N>
-class FiniteField
-{
-  static_assert(std::is_integral<NumberT>::value and
-		std::is_unsigned<NumberT>::value,
-                "First template argument is not an unsigned integral type");
-  static_assert(P > 0, "P must be greater than 0.");
-  static_assert(N >= 0, "N must be greater or equal than 0.");
-  
-  NumberT field_size;
-  
-public:
-  using NumberType = NumberT;
-
-  FiniteField()
-    : field_size(positive_int_power(P, N))
-  {
-    // Empty
-  }
-
-  /// Retorna la característica del campo.
-  unsigned short characteristic() const
-  {
-    return P;
-  }
-
-  /// Retorna el valor de potencia al cual está elevada la característica.
-  unsigned short power() const
-  {
-    return N;
-  }
-
-  /// Retorna la cardinalidad del campo.
-  NumberT size() const
-  {
-    return field_size;
-  }
-
-  /// Retorna el máximo valor del campo.
-  NumberT max_value() const
-  {
-    return field_size - 1;
-  }
-
-  /// Interfaz para la operación de suma de dos números dentro del campo.
-  virtual NumberType sum(const NumberType &, const NumberType &) const = 0;
-
-  /// Interfaz para la operación de resta de dos números dentro del campo.
-  virtual NumberType sub(const NumberType &, const NumberType &) const = 0;
-
-  /** Interfaz para la operación de multiplicación de dos números dentro del
-      campo.
-  */
-  virtual NumberType mul(const NumberType &, const NumberType &) const = 0;
-
-  /// Interfaz para la operación de división de dos números dentro del campo.
-  virtual NumberType div(const NumberType &, const NumberType &) const = 0;
-
-  /// Interfaz para la operación que retorna el opuesto aditivo de un número.
-  virtual NumberType op(const NumberType &) const = 0;
-
-  /** Interfaz para la operación que retorna el inverso multiplicativo de un
-      número.
-  */
-  virtual NumberType inv(const NumberType &) const = 0;
-
-  /** Genera un número aleatorio dentro del campo.
-   *
-   *  @tparam RandomNumberGenerator Tipo de generador de números aleatorios.
-   *
-   *  @pre RandomNumberGenerator debe ser un un tipo de generador de números
-   *       aleatorios de la biblioteca estándar de C++.
-   *
-   *  @param rng Generador de números aleatorios.
-   *  @return Número aleatorio dentro del campo distribuido uniformemente.
-   */
-  template <class RandomNumberGenerator>
-  NumberType get_random(RandomNumberGenerator & rng) const
-  {
-    std::uniform_int_distribution<NumberType> unif_dist(0, max_value());
-    return unif_dist(rng);
-  }
-
-  /** Trunca un número dentro del campo.
-   *
-   *  @param n Número con cualquier valor.
-   *  @return número dentro del campo.
-   */
-  NumberType operator () (const NumberType & n)
-  {
-    return n % field_size;
-  }
-};
-
-# endif // FINITEFIELD_H
Index: nitefield2.C
===================================================================
--- finitefield2.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,22 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-# include <finitefield2.H>
Index: nitefield2.H
===================================================================
--- finitefield2.H	(revision e627b6788dadc031467bbca122e1623b0db2d6ef)
+++ 	(revision )
@@ -1,246 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-/*
-  Este archivo contiene la definición e implementación de una plantilla de clase
-  para representar campos finitos con carácterística p = 2. Con el fin de
-  definir operaciones aritméticas sobre números pertenecientes al campo y
-  obtener sus resultados dentro éste.
-
-  Creado por:        Alejandro J. Mujica
-  Fecha de creación: 
-*/
-
-# ifndef FINITEFIELD2_H
-# define FINITEFIELD2_H
-
-# include <cmath>
-# include <stdexcept>
-
-# include <finitefield.H>
-
-/**
- *  Plantilla que representa un campo finito con característica @f$p = 2@f$.
- *
- *  @tparam NumberT Tipo numérico que se va a restringir.
- *
- *  @tparam N   Valor constante para la potencia de dos que definirá el tamaño
- *              del campo. Por lo tanto, el tamaño del campo estará definido
- *              por @f$2^N@f$.
- *
- *  @pre NumberT debe ser un tipo de los enteros sin signo de la biblioteca
- *       estándar de C++
- *  @pre 0 <= N <= 64
- *
- *  @see FiniteField FieldNumber
- *
- *  @author Alejandro J. Mujica (amujica en cenditel punto gob punto ve).
- *  @author José Angel Contreras (jancontreras en cenditel punto gob punto ve).
- */
-template <typename NumberT, unsigned short N>
-class FiniteField2 : public FiniteField<NumberT, 2, N>
-{
-  static_assert(0 <= N and N <= 64, "N must be a value less than 64");
-
-  static constexpr unsigned short TABLE_SIZE = 65; // Desde 2^0 hasta 2^64
-
-  static constexpr uint64_t POWER2_TABLE[TABLE_SIZE] =
-    {
-       1u, 2u, 4u, 8u, 16u, 32u, 64u, 128u, 256u, 512u, 1024u, 2048u, 4096u,
-       8192u, 16384u, 32768u, 65536u, 131072u, 262144u, 524288u, 1048576u,
-       2097152u, 4194304u, 8388608u, 16777216u, 33554432u, 67108864u,
-       134217728u, 268435456u, 536870912u, 1073741824u, 2147483648u,
-       4294967296u, 8589934592u, 17179869184u, 34359738368u, 68719476736u,
-       137438953472u, 274877906944u, 549755813888u, 1099511627776u,
-       2199023255552u, 4398046511104u, 8796093022208u, 17592186044416u,
-       35184372088832u, 70368744177664u, 140737488355328u, 281474976710656u,
-       562949953421312u, 1125899906842624u, 2251799813685248u,
-       4503599627370496u, 9007199254740992u, 18014398509481984u,
-       36028797018963968u, 72057594037927936u, 144115188075855872u,
-       288230376151711744u, 576460752303423488u, 1152921504606846976u,
-       2305843009213693952u, 4611686018427387904u, 9223372036854775808u,
-       18446744073709551615u
-    };
-
-  using UnifDistType = std::uniform_int_distribution<NumberT>;
-
-public:
-  /// Tipo de número que maneja el campo.
-  using NumberType = NumberT;
-
-private:
-  NumberType irreducible_polynomial;
-
-  void generate_irreducible_polynomial();
-
-public:
-  FiniteField2();
-
-  /// Efectúa la suma de dos números dentro del campo.
-  NumberType sum(const NumberType &, const NumberType &) const;
-
-  /// Efectúa la resta de dos números dentro del campo.
-  NumberType sub(const NumberType &, const NumberType &) const;
-
-  /// Efectúa la multiplicación de dos números dentro del campo.
-  NumberType mul(const NumberType &, const NumberType &) const;
-
-  /// Efectúa la división de dos números dentro del campo.
-  NumberType div(const NumberType &, const NumberType &) const;
-
-  /// Calcula el opuesto de un número dentro del campo.
-  NumberType op(const NumberType &) const;
-
-  /// Calcula el inverso numérico de un número dentro del campo.
-  NumberType inv(const NumberType &) const;
-};
-
-template <typename NumberT, unsigned short N>
-void FiniteField2<NumberT, N>::generate_irreducible_polynomial()
-{
-  irreducible_polynomial |= POWER2_TABLE[0];
-  irreducible_polynomial |= POWER2_TABLE[1];
-  irreducible_polynomial |= POWER2_TABLE[5];
-  irreducible_polynomial |= POWER2_TABLE[6];
-  irreducible_polynomial |= POWER2_TABLE[8];
-}
-
-template <typename NumberT, unsigned short N> 
-FiniteField2<NumberT, N>::FiniteField2()
-  : irreducible_polynomial(NumberType(0))
-{
-  generate_irreducible_polynomial();
-}
-
-/**
- *  @param a Primer elemento en la suma.
- *  @param b Segundo elemento en la suma.
- *  @return suma dentro del campo.
- */
-template <typename NumberT, unsigned short N> NumberT
-FiniteField2<NumberT, N>::sum(const NumberType & a, const NumberType & b) const
-{
-  return (a ^ b);
-}
-
-/**
- *  @param a Minuendo.
- *  @param b Sustraendo.
- *  @return resta dentro del campo.
- */
-template <typename NumberT, unsigned short N> NumberT
-FiniteField2<NumberT, N>::sub(const NumberType & a, const NumberType & b) const
-{
-  return (a ^ b);
-}
-
-/**
- *  @param a Multiplicando.
- *  @param b Multiplicador.
- *  @return producto dentro del campo.
- */
-template <typename NumberT, unsigned short N> NumberT
-FiniteField2<NumberT, N>::mul(const NumberType & a, const NumberType & b) const
-{
-  NumberType _a(a);
-  NumberType _b(b);
-  NumberType ret(0);
-
-  for (unsigned short i = 0; i < N; ++i)
-    {
-      if (_b & 1) // ¿Es impar?
-	ret ^= _a;
-
-      _a <<= 1;
-
-      if (_a >= this->size())
-	_a ^= irreducible_polynomial;
-
-      _b >>= 1;
-    }
-  
-  return ret;
-}
-
-/**
- *  @param a Dividendo.
- *  @param b Divisor.
- *  @return cociente dentro del campo.
- */
-template <typename NumberT, unsigned short N> NumberT
-FiniteField2<NumberT, N>::div(const NumberType & _a,
-                                  const NumberType & _b) const
-{
-  NumberType ret = NumberType(0);
-
-  NumberType carry;
-
-  NumberType a(_a);
-  NumberType b(_b);
-
-  for (unsigned short i = 0; i < N; ++i)
-    {
-      if (b & 1)
-        ret ^= a;
-
-      //      carry = a & LAST_BIT;
-
-      a <<= 1;
-
-      if (carry)
-        a ^= irreducible_polynomial;
-
-      b >>= 1;
-    }
-
-  return ret;
-}
-
-/**
- *  @param a Número.
- *  @return Opuesto numérico dentro del campo. Tal que @f$a + op(a) = 0@f$.
- */
-template <typename NumberT, unsigned short N> NumberT
-FiniteField2<NumberT, N>::op(const NumberType & n) const
-{
-  return this->size() - n;
-}
-
-/**
- *  @param a Número.
- *  @return Inverso numérico dentro del campo.  Tal que @f$a * inv(a) = 1@f$.
- */
-template <typename NumberT, unsigned short N> NumberT
-FiniteField2<NumberT, N>::inv(const NumberType & n) const
-{
-  if (n == NumberType(0))
-    throw std::logic_error("0 has not numeric inverse");
-
-  NumberType inv = NumberType(0);
-
-  while ((inv * n) % this->size() != NumberType(1))
-    ++inv;
-
-  return inv;
-}
-
-# endif // FINITEFIELD2_H
-
Index: lynomial.C
===================================================================
--- polynomial.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,22 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-# include <polynomial.H>
Index: lynomial.H
===================================================================
--- polynomial.H	(revision e627b6788dadc031467bbca122e1623b0db2d6ef)
+++ 	(revision )
@@ -1,432 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-/*
-  Este archivo contiene la definición e implementación de una plantilla de clase
-  para representar polinomios.
-
-  Creado por:        Alejandro J. Mujica
-  Fecha de creación: 
-*/
-
-
-# ifndef POLYNOMIAL_H
-# define POLYNOMIAL_H
-
-# include <stdexcept>
-# include <sstream>
-# include <vector>
-# include <limits>
-
-# include<iostream>
-
-/**
- *  Plantilla para representar polinomios de una variable.
- *
- *  @tparam NumberT Tipo de dato para los coeficientes.
- *
- *  @author Alejandro Mujica     (amujica en cenditel punto gob punto ve).
- *  @author José Angel Contreras (jancontreras en cenditel punto gob punto ve).
- */
-template <typename NumberT = double>
-class Polynomial
-{
-public:
-  /// Tipo de conjunto para el polinomio.
-  using PolynomialType = std::vector<NumberT>;
-  /// Tipo de número para el grado.
-  using DegreeType = typename PolynomialType::size_type;
-  /// Tipo de número para los coeficientes.
-  using NumberType = typename PolynomialType::value_type;
-
-private:
-  DegreeType     deg;
-  PolynomialType pol;
-
-public:
-  /// Construcción de un polinomio dado un grado.
-  Polynomial(const DegreeType & _deg = DegreeType(0));
-
-  /// Construcción por medio de una lista de inicialización.
-  Polynomial(const std::initializer_list<NumberType> &);
-
-  /// Constructor copia
-  Polynomial(const Polynomial &);
-
-  /// Constructor de movimiento (move semantic)
-  Polynomial(Polynomial &&);
-
-  /// Retorna el grado del polinomio.
-  const DegreeType & degree() const
-  {
-    return deg;
-  }
-
-  /**
-   *  Retorna el coeficiente de la posición dada.
-   *
-   *  @param exp Grado del coeficiente deseado.
-   *  @return Coeficiente de la posición dada.
-   *  @throw overflow_error si el exponente es mayor que el grado del polinomio.
-   */
-  const NumberType & get_coefficient(const DegreeType & exp) const
-  {
-    if (exp > deg)
-      throw std::overflow_error("exp is greater than polynomial degree");
-
-    return pol.at(deg - exp);
-  }
-
-  /**
-   *  Asigna valor al coeficiente de la posición dada.
-   *
-   *  @param exp Grado del coeficiente deseado.
-   *  @param value Valor que se asignará al coeficiente.
-   *  @throw overflow_error si el exponente es mayor que el grado del polinomio.
-   */
-  void set_coefficient(const DegreeType & exp, const NumberType & value)
-  {
-    if (exp > deg)
-      throw std::overflow_error("exp is greater than polynomial degree");
-
-    pol.at(deg - exp) = value;
-  }
-
-  /// Determina si el polinomio es nulo.
-  bool is_null() const;
-
-  bool operator ! () const;
-
-  Polynomial operator + (const Polynomial &);
-
-  Polynomial & operator += (const Polynomial &);
-
-  Polynomial operator - (const Polynomial &);
-
-  Polynomial & operator -= (const Polynomial &);
-
-  Polynomial operator * (const Polynomial &);
-
-  Polynomial operator / (const Polynomial &);
-
-  Polynomial operator % (const Polynomial &);
-
-  Polynomial & operator = (const Polynomial &);
-
-  Polynomial & operator = (Polynomial &&);
-
-  bool operator == (const Polynomial &) const;
-
-  bool operator != (const Polynomial &) const;
-
-  /// Retorna una representación del polinomio en cadena.
-  std::string to_string(const char & var = 'x');
-};
-
-/**
- *  Constructor que funge de paramétrico y por omisión al mismo tiempo.
- *
- *  @param _deg Grado del polinomio. Por omisión es 0.
- */
-template <typename NumberT>
-Polynomial<NumberT>::Polynomial(const Polynomial::DegreeType & _deg)
-  : deg(_deg), pol(deg + DegreeType(1), NumberType(0))
-{
-  // Empty
-}
-
-/**
- *  Construye un polinomio dada una lista de inicialización.
- *
- *  Para inicializar el polinomio se deben pasar los valores de los coeficientes
- *  entre llaves y separados por coma (,). Debe escribirse el polinomio
- *  completo.
- *
- *  Por ejemplo, si se quiere construir el polinomio
- *  @f$p(x) = x^5 + 2x^4 + 3x^3 + 4x^2 + 5x + 6;@f$
- *  la instanciación debe realizarse de la siguiente manera:
- *  @code{.cpp}Polynomial<> p = { 1, 2, 3, 4, 5, 6 };@endcode
- *
- *  @param l Lista de inicialización del polinomio.
- */
-template <typename NumberT>
-Polynomial<NumberT>::Polynomial(const std::initializer_list<NumberType> & l)
-  : deg(DegreeType(l.size()) - DegreeType(1)), pol(l)
-{
-  // Empty
-}
-
-template <typename NumberT>
-Polynomial<NumberT>::Polynomial(const Polynomial & p)
-  : deg(p.deg), pol(p.pol)
-{
-  // Empty
-}
-
-template <typename NumberT>
-Polynomial<NumberT>::Polynomial(Polynomial && p)
-  : deg(DegreeType(0)), pol(deg + DegreeType(1), NumberType(0))
-{
-  std::swap(deg, p.deg);
-  std::swap(pol, p.pol);
-}
-
-
-/**.
- *  Un polinomio es nulo si todos sus coeficientes son cero.
- *
- *  @return <code>true</code> si el polinomio es nulo y <code>false</code> en
- *          caso contrario.
- */
-template <typename NumberT>
-bool Polynomial<NumberT>::is_null() const
-{
-  for (const NumberType & c : pol)
-    if (c != NumberType(0))
-      return false;
-  return true;
-}
-
-template <typename NumberT>
-bool Polynomial<NumberT>::operator ! () const
-{
-  return is_null();
-}
-
-template <typename NumberT>
-Polynomial<NumberT>
-Polynomial<NumberT>::operator + (const Polynomial & p)
-{
-  const DegreeType & min_degree = std::min(deg, p.deg);
-  const DegreeType & max_degree = std::max(deg, p.deg);
-
-  Polynomial ret(max_degree);
-
-  for (DegreeType i = DegreeType(0); i <= min_degree; ++i)
-    ret.set_coefficient(i, get_coefficient(i) + p.get_coefficient(i));
-
-  const Polynomial & max_degree_pol = deg > p.deg ? *this : p;
-
-  for (DegreeType i = min_degree + DegreeType(1); i <= max_degree; ++i)
-    ret.set_coefficient(i, max_degree_pol.get_coefficient(i));
-
-  return ret;
-}
-
-template <typename NumberT>
-Polynomial<NumberT> &
-Polynomial<NumberT>::operator += (const Polynomial & p)
-{
-  *this = *this + p;
-  return *this;
-}
-
-template <typename NumberT>
-Polynomial<NumberT>
-Polynomial<NumberT>::operator - (const Polynomial & p)
-{
-  const DegreeType & min_degree = std::min(deg, p.deg);
-  const DegreeType & max_degree = std::max(deg, p.deg);
-
-  Polynomial ret(max_degree);
-
-  for (DegreeType i = DegreeType(0); i <= min_degree; ++i)
-    ret.set_coefficient(i, get_coefficient(i) - p.get_coefficient(i));
-
-  Polynomial & max_degree_pol = deg > p.deg ? *this : p;
-
-  char sign = &max_degree_pol == this ? 1 : -1;
-
-  for (DegreeType i = min_degree + DegreeType(1); i <= max_degree; ++i)
-    ret.set_coefficient(i, sign * max_degree_pol.get_coefficient(i));
-
-  return ret;
-}
-
-template <typename NumberT>
-Polynomial<NumberT> &
-Polynomial<NumberT>::operator -= (const Polynomial & p)
-{
-  *this = *this - p;
-  return *this;
-}
-
-template <typename NumberT>
-Polynomial<NumberT>
-Polynomial<NumberT>::operator * (const Polynomial & p)
-{
-  Polynomial ret(deg + p.deg);
-
-  for (DegreeType i = DegreeType(0); i <= deg; ++i)
-    for (DegreeType j = DegreeType(0); j < p.deg; ++j)
-      ret.set_coefficient(i + j,
-        ret.get_coefficient(i + j) + get_coefficient(i) * p.get_coefficient(j));
-        
-
-  return ret;
-}
-
-template <typename NumberT>
-Polynomial<NumberT>
-Polynomial<NumberT>::operator / (const Polynomial & p)
-{
-  if (p.is_null())
-    throw std::logic_error("Polynomial devision by 0");
-
-  if (p.deg > deg)
-    return Polynomial();
-
-  Polynomial ret(deg - p.deg);
-
-  NumberType inv = NumberType(0);
-
-  if (p.deg > 0)
-    {
-      Polynomial tmp = *this;
-
-      DegreeType last = p.deg;
-
-      while (last > DegreeType(0) and p.get_coefficient(last) == NumberType(0))
-        --last;
-
-      inv = NumberType(1) / p.get_coefficient(last);
-
-      for (DegreeType i = tmp.deg; i >= p.deg; --i)
-        {
-          ret.set_coefficient(i - p.deg, tmp.get_coefficient(i) * inv);
-
-          for (DegreeType j = DegreeType(0); j <= p.deg; ++j) 
-            tmp.set_coefficient(i - j,
-              tmp.get_coefficient(i - j) - p.get_coefficient(p.deg - j) *
-              ret.get_coefficient(i - p.deg));
-        }
-
-      return ret;
-    }
-
-  DegreeType first = DegreeType(0);
-
-  while (first <= p.deg and p.get_coefficient(first) == NumberType(0))
-    ++first;
-
-  inv = NumberType(1) / p.get_coefficient(first);
-
-  for (NumberType & c : ret.pol)
-    c *= inv;
-
-  return ret;
-}
-
-template <typename NumberT>
-Polynomial<NumberT>
-Polynomial<NumberT>::operator % (const Polynomial & p)
-{
-  if (p.is_null()) 
-    throw std::logic_error("Polynomial denominator = 0");
-
-  if (p.deg == DegreeType(0))
-    return Polynomial();
-
-  Polynomial ret = *this;
-
-  DegreeType last = p.deg;
-
-    while (last > DegreeType(0) and p.get_coefficient(last) == NumberType(0))
-      --last;	
-
-  NumberType inv = NumberType(1) / p.get_coefficient(last);
-
-  for (DegreeType i = ret.deg; i >= p.deg; --i)
-    {
-      NumberType q = ret.get_coefficient(i) * inv;
-
-      for (DegreeType j = DegreeType(0); j <= p.deg; ++j) 
-        ret.set_coefficient(i - j, ret.get_coefficient(i - j) -
-          p.get_coefficient(p.deg - j) * q);
-    }
-
-  while (ret.deg > DegreeType(0) and ret.get_coefficient(ret.deg) == NumberType(0))
-    --ret.deg;
-
-  return ret;
-}
-
-template <typename NumberT>
-Polynomial<NumberT> &
-Polynomial<NumberT>::operator = (const Polynomial & p)
-{
-  if (&p == this)
-    return *this;
-
-  deg = p.deg;
-  pol = p.pol;
-
-  return *this;
-}
-
-template <typename NumberT>
-Polynomial<NumberT> &
-Polynomial<NumberT>::operator = (Polynomial && p)
-{
-  std::swap(deg, p.deg);
-  std::swap(pol, p.pol);
-
-  return *this;
-}
-
-template <typename NumberT>
-bool Polynomial<NumberT>::operator == (const Polynomial & p) const
-{
-  if (deg != p.deg)
-    return false;
-
-  for (DegreeType i = DegreeType(0); i <= deg; ++i)
-    if (pol.at(i) != p.pol.at(i))
-      return false;
-
-  return true;
-}
-
-template <typename NumberT>
-bool Polynomial<NumberT>::operator != (const Polynomial & p) const
-{
-  return not (*this == p);
-}
-
-template <typename NumberT>
-std::string Polynomial<NumberT>::to_string(const char & var)
-{
-  std::stringstream sstr;
-
-  if (deg > DegreeType(1))
-    for (DegreeType i = DegreeType(0); i < deg - DegreeType(1); ++i)
-      sstr << pol.at(i) << var << '^' << deg - i << " + ";
-
-  if (deg > DegreeType(0))
-    sstr << pol.at(deg - DegreeType(1)) << var << " + ";
-
-  sstr << pol.at(deg);
-
-  return sstr.str();
-}
-
-# endif // POLYNOMIAL_H
-
Index: st_fieldnumber.C
===================================================================
--- test_fieldnumber.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,27 +1,0 @@
-# include <iostream>
-# include <fieldnumber.H>
-# include <finitefield2.H>
-
-using namespace std;
-
-int main()
-{
-  FieldNumber<FiniteField2<uint64_t, 8>> nf1, nf2;
-
-  nf1 = 10;
-  nf2 = 20;
-
-  cout << nf1 + nf2 << '\n';
-  cout << nf1 - nf2 << '\n';
-  cout << nf1 * nf2 << '\n';
-
-  nf1 += nf2;
-  cout << nf1 << '\n';
-  nf1 -= nf2;
-  cout << nf1 << '\n';
-  nf1 *= nf2;
-  cout << nf1 << '\n';
-     
-  
-  return 0;
-}
Index: st_finitefield.C
===================================================================
--- test_finitefield.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,29 +1,0 @@
-# include <iostream>
-
-# include <finitefield2.H>
-
-using namespace std;
-
-int main()
-{  
-  FiniteField2<uint64_t, 8> field;
-
-  cout << "Máximo valor del campo: " << field.max_value() << '\n';
-  cout << "Cardinalidad: " << field.size() << '\n';
-  cout << "10 + 10 = " << field.sum(10, 10) << '\n';
-  cout << "15 + 15 = " << field.sum(15, 15) << '\n';
-  cout << "30 + 5 = " << field.sum(30, 5) << '\n';
-
-  cout << "30 - 5 = " << field.sub(30, 5) << '\n';
-  cout << "10 - 10 = " << field.sub(10, 10) << '\n';
-  cout << "5 - 7 = " << field.sub(5, 7) << '\n';
-
-  cout << "2 * 2 = " << field.mul(2, 2) << '\n';
-  cout << "5 * 2 = " << field.mul(5, 2) << '\n';
-  cout << "2 * 10 = " << field.mul(2, 10) << '\n';
-  cout << "2 * 15 = " << field.mul(2, 15) << '\n';
-  cout << "2 * 16 = " << field.mul(2, 16) << '\n';
-  cout << "17 * 2 = " << field.mul(17, 2) << '\n';
-
-  return 0;
-}
Index: il.C
===================================================================
--- util.C	(revision 645ad15f94098b91d698035c0303de0c8faa9f83)
+++ 	(revision )
@@ -1,22 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-# include <util.H>
Index: il.H
===================================================================
--- util.H	(revision e627b6788dadc031467bbca122e1623b0db2d6ef)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/*
-  Copyright (C) 2015
-  Alejandro Mujica (amujica en cenditel.gob.ve)
-  José Angel Contreras (jancontreras en cenditel.gob.ve)
-  Antonio Araujo (aaraujo en cenditel.gob.ve)
-  Pedro Buitrago (pbuitrago en cenditel.gob.ve)
- 
-  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
-  Tecnologías Libres
- 
-  Este programa es software libre; Usted puede usarlo bajo los términos de la
-  licencia de software GPL versión 2.0 de la Free Software Foundation.
- 
-  Este programa se distribuye con la esperanza de que sea útil, pero SIN
-  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
-  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
-  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
-  de la GPL junto con este programa; si no, escriba a la Free Software
-  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
-*/
-
-/*
-  Este archivo contiene la definiciones y (en algunos casos) implementaciones
-  de funciones utilitarias para problemas presentes en el proyecto.
-
-  Creado por:        Alejandro J. Mujica
-  Fecha de creación: 
-*/
-
-# ifndef UTIL_H
-# define UTIL_H
-
-# include <type_traits>
-
-/** Calcula la potencia @f$x^y@f$ con @f$x, y \in \mathcal{Z}^+@f$.
- *
- *  @tparam NumberType 
- *
- *  @pre NumberType debe corresponder a alguno de los tipos enteros sin signo
- *       de la biblioteca estándar de C++.
- *
- *
- *  @param base Base de la operación.
- *  @param exp Exponente de la operación.
- *
- *  @return el resultado de la operación de elevar base al exponente.
- */
-template <typename NumberType>
-NumberType positive_int_power(const NumberType & base, const NumberType & exp)
-{
-  static_assert(std::is_integral<NumberType>::value and
-		std::is_unsigned<NumberType>::value,
-		"Template argument is not an unsigned integral type");
-  
-  NumberType ret_val(1);
-
-  for (NumberType i = 0; i < exp; ++i)
-    ret_val *= base;
-
-  return ret_val;
-}
-
-# endif // UTIL_H
