📄 huge.h
字号:
// Huge.h: interface for the CHuge class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_HUGE_H__E3BA5718_7A62_4FCF_822F_E03224FAB86B__INCLUDED_)
#define AFX_HUGE_H__E3BA5718_7A62_4FCF_822F_E03224FAB86B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable:4018)
//////////////////////////////////////////////////////////////////////
// typedef / constant
//////////////////////////////////////////////////////////////////////
typedef unsigned char BYTE;
const unsigned MAX_HUGE_SIZE = 40;
const unsigned MB_TEST_TIMES = 15;
const unsigned ELEM_MAX_VALUE = -1;
const unsigned ELEM_BYTE_SIZE = sizeof(unsigned);
const unsigned ELEM_BYTE_SIZE_LOG2 = 2;
const unsigned ELEM_BYTE_SIZE_MASK = ELEM_BYTE_SIZE-1;
const unsigned ELEM_BIT_SIZE = ELEM_BYTE_SIZE<<3;
const unsigned ELEM_BIT_SIZE_LOG2 = 5;
const unsigned ELEM_BIT_SIZE_MASK = ELEM_BIT_SIZE-1;
//////////////////////////////////////////////////////////////////////
// Class CHuge
//////////////////////////////////////////////////////////////////////
class CHuge
{
public:
CHuge();
virtual ~CHuge();
private:
unsigned m_pValue[MAX_HUGE_SIZE];
int m_iSize;
bool m_bSign;
private:
void Zero( );
void Tidy( );
public:
bool IsMinus( );
void SetBit( unsigned pos, bool flag = true );
bool GetBit( unsigned pos );
unsigned GetBitLength( );
unsigned CountLastZeros( );
bool CreateFromBytes( BYTE pBytes[], int size );
bool TransToBytes(BYTE pBytes[], int size);
private:
friend int AbsCompare ( CHuge& a, CHuge& b );
friend int Compare ( CHuge& a, CHuge& b );
friend CHuge AbsAdd ( CHuge& a, CHuge& b );
friend CHuge AbsSub ( CHuge& a, CHuge& b );
friend void Divide ( CHuge& a, CHuge& b, CHuge& res, CHuge& rem );
public:
friend bool CreateRandomHuge( CHuge& n, const unsigned bits );
friend bool CreateRandomHugePrime( CHuge& n, const unsigned bits );
friend bool IsPrime ( CHuge& n );
friend bool Miller_Rabin( CHuge& n, CHuge& t, const unsigned shift );
friend CHuge PowerMod ( CHuge& base, CHuge& exp, CHuge& div );
public:
void operator = ( const int n );
void operator = ( const CHuge n );
unsigned operator [] ( const int index ) const;
unsigned& operator [] ( const int pos );
friend CHuge operator << ( CHuge& n, unsigned shift );
friend CHuge operator >> ( CHuge& n, unsigned shift );
///////////////////////////////////////////////////
friend bool operator < ( CHuge& a, CHuge& b );
friend bool operator <= ( CHuge& a, CHuge& b );
friend bool operator > ( CHuge& a, CHuge& b );
friend bool operator >= ( CHuge& a, CHuge& b );
friend bool operator == ( CHuge& a, CHuge& b );
friend bool operator != ( CHuge& a, CHuge& b );
friend CHuge operator - ( CHuge& n );
friend CHuge operator + ( CHuge& a, CHuge& b );
friend CHuge operator - ( CHuge& a, CHuge& b );
friend CHuge operator * ( CHuge& a, CHuge& b );
friend CHuge operator / ( CHuge& a, CHuge& b );
friend CHuge operator % ( CHuge& a, CHuge& b );
///////////////////////////////////////////////////
friend bool operator < ( CHuge& a, int n );
friend bool operator <= ( CHuge& a, int n );
friend bool operator > ( CHuge& a, int n );
friend bool operator >= ( CHuge& a, int n );
friend bool operator == ( CHuge& a, int n );
friend bool operator != ( CHuge& a, int n );
friend CHuge operator + ( CHuge& a, int n );
friend CHuge operator - ( CHuge& a, int n );
friend CHuge operator * ( CHuge& a, int n );
friend CHuge operator / ( CHuge& a, int n );
friend CHuge operator % ( CHuge& a, int n );
};
#endif // !defined(AFX_HUGE_H__E3BA5718_7A62_4FCF_822F_E03224FAB86B__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -