?? bigint.h
字號:
// BigInt.h: interface for the CBigInt class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BIGINT_H__E0A91F42_DF86_11D6_B0C1_00E04C391A51__INCLUDED_)
#define AFX_BIGINT_H__E0A91F42_DF86_11D6_B0C1_00E04C391A51__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//////////////////////////////////////////////////////////////////////
#define BI_MAXLEN 1200
#define BI_BASE 16
//////////////////////////////////////////////////////////////////////
struct bigint
{
char bit[BI_MAXLEN];//低位對應(yīng)低位,高位對應(yīng)高位
UINT len; //大數(shù)長度
};
typedef struct bigint BigInt;
//////////////////////////////////////////////////////////////////////
//大數(shù)算法庫(class CBigInt)
class CBigInt
{
public:
CBigInt();
// 以下代碼作者:0200935 王俊川
bool IsPrime(BigInt &P);//檢查P是否為大素數(shù)
bool GetPrime(BigInt &P,UINT len);//獲取隨機大素數(shù)
bool PowMod(BigInt &C,BigInt &A,BigInt &B,BigInt &N);//大數(shù)乘方取模
bool Inverse(BigInt &A,BigInt &X,BigInt &N,BigInt &Y);//求乘法逆元
bool Mul(BigInt &C,BigInt &A,BigInt &B);//大數(shù)乘法
bool Div(BigInt &M,BigInt &Spls,BigInt &A,BigInt &B);//大數(shù)除法
bool Add(BigInt &C,BigInt &A,BigInt &B);//大數(shù)加法
bool Sub(BigInt &C,BigInt &A,const BigInt &B);//大數(shù)減法
// 以下代碼作者:0200906 高志剛
bool ShR(BigInt &Out,BigInt &In,UINT len);//大數(shù)邏輯右移
int Cmp(const BigInt &A,const BigInt &B);//大數(shù)比較
BigInt New(long n);//產(chǎn)生一個大數(shù)
long GetVal(const BigInt &BI);//獲取大數(shù)的值
void SetVal(BigInt &BI,long n);//設(shè)置大數(shù)的值
bool BuildBIFromByte(BigInt &Out,const char *In,UINT len);//由輸入字節(jié)組構(gòu)造一個大數(shù)
bool BuildBIFromHalfByte(BigInt &Out,const char *In,UINT len);//由輸入半字節(jié)組構(gòu)造一個大數(shù)
bool BuildBIFromStr(BigInt &Out,char *In,UINT len);//由輸入字符串構(gòu)造一個大數(shù)
bool RandVal(BigInt &Out,UINT len);//產(chǎn)生隨機大數(shù)
private:
// 以下代碼作者:0200935 王俊川
bool GetDivNext(BigInt &Spls,const BigInt &A,const BigInt &B,int &i);
// 以下代碼作者:0200906 高志剛
bool InitMulCache(BigInt &In);//初始化乘法緩存
void SetLen(BigInt &BI,UINT start);//設(shè)置大數(shù)的長度
private:
BigInt MulCache[ BI_BASE ];//乘法緩沖區(qū)
BigInt Zero,One,Two;
};
#endif // !defined(AFX_BIGINT_H__E0A91F42_DF86_11D6_B0C1_00E04C391A51__INCLUDED_)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -