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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = pfelem.h
  3. //
  4. #ifndef _PFELEM_H_
  5. #define _PFELEM_H_
  6. class PrimeFieldElem
  7. {
  8. public:
  9.   PrimeFieldElem(void);
  10.   PrimeFieldElem(int modulus);
  11.   PrimeFieldElem(int modulus, int value);
  12.   //void operator=(const int);
  13.   bool operator==(const int);
  14.   bool operator!=(const int);
  15.   void operator=(const PrimeFieldElem&);
  16.   void operator+=(const PrimeFieldElem&);
  17.   void operator*=(const PrimeFieldElem&);
  18.   void operator-=(const PrimeFieldElem&);
  19. //  operator int(){return Value;}
  20.   friend PrimeFieldElem operator+( const PrimeFieldElem,
  21.                             const PrimeFieldElem );
  22.   friend PrimeFieldElem operator-( const PrimeFieldElem,
  23.                             const PrimeFieldElem );
  24.   friend PrimeFieldElem operator*( const PrimeFieldElem,
  25.                             const PrimeFieldElem );
  26.   friend PrimeFieldElem operator/( const PrimeFieldElem,
  27.                             const PrimeFieldElem );
  28.   friend PrimeFieldElem operator*( const int,
  29.                             const PrimeFieldElem );
  30.   friend PrimeFieldElem neg(PrimeFieldElem);
  31.   friend PrimeFieldElem recip(PrimeFieldElem);
  32.   int Value;
  33.   int Modulus;
  34. private:
  35. };
  36. //inline void PrimeFieldElem::operator=(const int value)
  37. //{Value=value;}
  38. inline bool PrimeFieldElem::operator==(const int value)
  39. {return(Value==value);}
  40. inline bool PrimeFieldElem::operator!=(const int value)
  41. {return(Value!=value);}
  42. inline void PrimeFieldElem::operator=(const PrimeFieldElem &right)
  43.   {Modulus = right.Modulus;
  44.   Value = right.Value;}
  45. inline void PrimeFieldElem::operator+=(const PrimeFieldElem &right)
  46.   { Value = (Value + right.Value)%Modulus;}
  47. inline void PrimeFieldElem::operator*=(const PrimeFieldElem &right)
  48.   { Value = (Value * right.Value)%Modulus;}
  49. inline void PrimeFieldElem::operator-=(const PrimeFieldElem &right)
  50.   { Value = (Modulus + Value - right.Value)%Modulus;}
  51. inline PrimeFieldElem operator+( const PrimeFieldElem _e1,
  52.                           const PrimeFieldElem _e2)
  53.   {return PrimeFieldElem(_e1.Modulus,(_e1.Value + _e2.Value));}
  54. inline PrimeFieldElem operator-( const PrimeFieldElem _e1,
  55.                           const PrimeFieldElem _e2)
  56.   {return PrimeFieldElem(_e1.Modulus,(_e1.Value + _e1.Modulus - _e2.Value));}
  57. inline PrimeFieldElem operator*( const PrimeFieldElem _e1,
  58.                           const PrimeFieldElem _e2)
  59.   {return PrimeFieldElem(_e1.Modulus,(_e1.Value * _e2.Value));}
  60. inline PrimeFieldElem operator*( const int _e1,
  61.                                   const PrimeFieldElem _e2)
  62.   {return PrimeFieldElem(_e2.Modulus,(_e1 * _e2.Value));}
  63. #include <iostream>
  64.   using namespace std;
  65. ostream& operator<< (ostream&, const PrimeFieldElem&);
  66. #endif