先說說大整數怎麽定義吧,我是用壹個類來寫的,支持1024位的大整數,整數是用數組來裝的,長度可以自己設。然後定義了相關的成員函數,如四則運算,當然也包含了妳所說的素性檢測。這裏用的素性檢測的算法是拉賓米勒算法,這個算法可以判斷大整數是否有可能是素數,函數名為Rab。如果妳想得到大素數,可以看看素性檢測相關的資料,拉賓米勒算法是最常用的算法。類裏也寫了個GetPrime函數用於獲得大素數。類的定義如下:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define BI_MAXLEN 64
class CBigNumber
{
public:
//大數在0x100000000進制下的長度
unsigned m_nLength;
//用數組記錄大數在0x100000000進制下每壹位的值
unsigned long m_ulValue[BI_MAXLEN];
CBigNumber();
~CBigNumber();
/*****************************************************************
基本操作與運算
Mov,賦值運算,可賦值為大數或普通整數
Cmp,比較運算,比較兩個大數或兩個普通整數的大小
Add,加,求大數與大數或大數與普通整數的和
Sub,減,求大數與大數或大數與普通整數的差
Mul,乘,求大數與大數或大數與普通整數的積
Div,除,求大數與大數或大數與普通整數的商
Mod,模,求大數與大數或大數與普通整數的模
Pow,乘方,求大數與普通整數的乘方
*****************************************************************/
void Mov(unsigned __int64 A);
void Mov(CBigNumber A);
CBigNumber Add(CBigNumber A);
CBigNumber Sub(CBigNumber A);
CBigNumber Mul(CBigNumber A);
CBigNumber Div(CBigNumber A);
CBigNumber Mod(CBigNumber A);
CBigNumber Add(unsigned long A);
CBigNumber Sub(unsigned long A);
CBigNumber Mul(unsigned long A);
CBigNumber Div(unsigned long A);
unsigned long Mod(unsigned long A);
int Cmp(CBigNumber A);
CBigNumber Pow(unsigned long A);
/*****************************************************************
輸入輸出
Get,從字符串按10進制或16進制格式輸入到大數
Put,將大數按10進制或16進制格式輸出到字符串
*****************************************************************/
// void Get(unsigned char *str, UINT len);
CBigNumber Get(unsigned char *str, unsigned long len);
void Put10(CString &str);
void Put256(CString &str);
void Put16(CString &str);
void Putchar(CString &str);
/*****************************************************************
RSA相關運算
Rab,拉賓米勒算法進行素數測試
Euc,歐幾裏德算法求解同余方程
Mon,蒙格馬利法進行冪模運算
GetPrime,產生指定長度的隨機大素數
*****************************************************************/
int Rab();
CBigNumber Euc(CBigNumber A);
//CBigNumber RsaTrans(CBigNumber A, CBigNumber B);
CBigNumber Mon(CBigNumber A, CBigNumber B);
void GetPrime(int bits);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
最後提醒樓主壹點,大素數不是靠從1到那個數減1那樣算的,因為那樣真的很慢的
還有,這個只是壹個類的定義,實現部分妳可以按自己的想法定義,當然如果有不懂可以找我,我有它的實現部分