bchpoly.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:3k
源码类别:

3G开发

开发平台:

Visual C++

  1. // bchpoly.cpp
  2. //
  3. #include <iostream>
  4. #include <fstream>
  5. #include "cyclo_partit.h"
  6. #include "galfield.h"
  7. //#include "pfelem.h"
  8. //#include "xfelem.h"
  9. #include "poly_pf.h"
  10. #include "min_poly.h"
  11. //#include "cycpoly.h"
  12. //#include "stdlib.h"
  13. //#include "berlefac.h"
  14. #ifdef _DEBUG
  15. using namespace std;
  16.  ofstream DebugFile("bchpoly.dbg", ios::out);
  17. #endif
  18. int main(int argc, char* argv[])
  19. {
  20.   int big_fld_deg;
  21.   int big_field_expon;
  22.   int num_cosets;
  23.   int tau;
  24.   bool *min_poly_needed;
  25.   int coset_idx;
  26.   int i,j;
  27.   PolyOvrPrimeField *gener_poly;
  28.   PolyOvrPrimeField *min_poly;
  29.   PolyOvrPrimeField *prim_poly_to_define_gf;
  30.   CyclotomicCoset *coset;
  31.   GaloisField *exten_field;
  32.   PrimeFieldElem** prim_poly_coeff;
  33. //  ExtFieldElem xa,xb;
  34. //  ExtFieldElem xc,xd;
  35. //  ExtFieldElem xe,xf;
  36.   cout << "Hello from main()" << endl;
  37.  // int cyc_poly_number = 1023;
  38.   int pp_degree = 10;
  39.   int prime_field_base = 2;
  40.   big_field_expon = 10;
  41.   tau = 3;
  42.   prim_poly_coeff = new PrimeFieldElem*[pp_degree+1];
  43.   //for m=15, set coeffs 15, 1, 0
  44.   //for m=10, set coeffs 10, 3, 0
  45.   //for m=6, set coeffs 6, 1, 0
  46.   //for m=4, set coeffs 4, 1, 0
  47.   prim_poly_coeff[0] = new PrimeFieldElem(2,1);
  48.   prim_poly_coeff[1] = new PrimeFieldElem(2,0);
  49.   prim_poly_coeff[2] = new PrimeFieldElem(2,0);
  50.   prim_poly_coeff[3] = new PrimeFieldElem(2,1);
  51.   prim_poly_coeff[4] = new PrimeFieldElem(2,0);
  52.   prim_poly_coeff[5] = new PrimeFieldElem(2,0);
  53.   prim_poly_coeff[6] = new PrimeFieldElem(2,0);
  54.   prim_poly_coeff[7] = new PrimeFieldElem(2,0);
  55.   prim_poly_coeff[8] = new PrimeFieldElem(2,0);
  56.   prim_poly_coeff[9] = new PrimeFieldElem(2,0);
  57.   prim_poly_coeff[10] = new PrimeFieldElem(2,1);
  58.   prim_poly_to_define_gf = new PolyOvrPrimeField(prime_field_base, pp_degree, prim_poly_coeff);
  59.   exten_field = new GaloisField( prime_field_base,big_field_expon,prim_poly_to_define_gf);
  60.   CyclotomicPartition* coset_partition = 
  61.                       new CyclotomicPartition( prime_field_base, 
  62.                                                big_field_expon);
  63.   num_cosets = coset_partition->GetNumCosets();
  64.   min_poly_needed = new bool[num_cosets];
  65.   for( i=0; i<num_cosets; i++){
  66.      min_poly_needed[i] = false;
  67.   }
  68.   for( j=0; j<=tau; j++){
  69.      coset_idx = coset_partition->GetCosetIndex(j);
  70.      min_poly_needed[coset_idx] = true;
  71.   }
  72.   gener_poly = NULL;
  73.   for( j=1; j<=tau; j++){
  74.      if(min_poly_needed[j]){
  75.         coset = coset_partition->GetSpecificCoset(j);
  76.         if(gener_poly == NULL){
  77.            gener_poly = new MinimalPolynomial(exten_field, coset);
  78.         }
  79.         else{
  80.            min_poly = new MinimalPolynomial(exten_field, coset);
  81.            (*gener_poly) *= (*min_poly);
  82.            delete min_poly;
  83.         }
  84.      }
  85.   }
  86.   cin >> prime_field_base;
  87. return 0;
  88. }