⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cyclo_partit.cpp

📁 《无线通信系统仿真——c++使用模型》这本书的源代码
💻 CPP
字号:
//
// primpoly.cpp
//

#include <iostream>
#include <fstream>
#include "cyclo_partit.h"
#include "ipow.h"
//using namespace std;
extern ::ofstream DebugFile;


//=====================================================
CyclotomicPartition::CyclotomicPartition( int prime_field_base,
                                                int degree )
{
   int first_element;
   int total_count;
   int element_count;
   int i;
   int element;
   int base;

   Specific_Coset = new CyclotomicCoset;
   Modulus = int(ipow(prime_field_base, degree)-1);
   total_count = 0;
   Coset_Start = new int[(Modulus+1)/2];
   Coset_Size = new int[(Modulus+1)/2];
   Element_Vector = new int[Modulus];
   bool* used = new bool[Modulus];
   for(i=0; i<Modulus; i++){
      used[i] = false;
   }
   Coset_Start[0] = 0;
   Coset_Size[0] = 1;
   Element_Vector[0] = 0;
   Num_Cosets = 1;
   total_count++;

   first_element = -1;
   do{
      do{
         first_element += 2;
      }while(used[first_element]);
      element = first_element;
      element_count = 0;

      Coset_Start[Num_Cosets] = Coset_Start[Num_Cosets-1] + Coset_Size[Num_Cosets-1];
      base = Coset_Start[Num_Cosets];

      do{
         Element_Vector[base + element_count] = element;
         used[element] = true;
         element_count++;
         total_count++;
         element = (prime_field_base * element)%Modulus;
      } while(element != first_element);
      Coset_Size[Num_Cosets] = element_count;
      Num_Cosets++;
   }while(total_count <(Modulus-1));
}
//=======================================================
int CyclotomicPartition::GetNumCosets(void)
{
   return(Num_Cosets);
}
//=======================================================
CyclotomicCoset *CyclotomicPartition::GetSpecificCoset(int coset_index)
{
   Specific_Coset->start = &(Element_Vector[Coset_Start[coset_index]]);
   Specific_Coset->size = Coset_Size[coset_index];
   return(Specific_Coset);
}
//===========================================================
int CyclotomicPartition::GetCosetIndex(int element)
{
   int i, j, index;
   i=-1;
   do{
      i++;
   }while( (i<(Modulus-1)) && (element != Element_Vector[i]));
   for(j=0; j<Num_Cosets; j++){
      if( (i>=Coset_Start[j]) && (i<(Coset_Start[j]+Coset_Size[j]))){
         index = j;
         break;
      }
   }
   return(index);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -