GMP 是GNU Multiple-Precision 的縮寫,是一個免費的大整數運算庫,並且公開全部原始碼.其官方網站好像是GNU MP Home Page. 不過其上面的GMP 庫都是僅僅提供給Linux上使用的.
我上傳了一個Windows先行編譯版本到CSDN,可以靜態連結(lib目錄下),也可以動態連結(dll目錄下)
http://download.csdn.net/source/270555
將任意一個版本解壓到某個目錄下以後,將對應標頭檔目錄和庫檔案目錄添加到VC的標準標頭檔和庫檔案搜尋路徑裡面就可以了.比如VC6.0裡面可以通過菜單Tools/Options...,然後選擇標籤Directories,分別將路徑添加到Include files 和Library files裡面就可以了. (如果使用動態連結,最好將動態連結程式庫拷貝到標準執行目錄,如C:/Windows/System32等)
下面是一個我通過google找到的GMP庫的文檔:
GMP Manual
而在使用時,當然要在源檔案裡面加入
#include <gmp.h>
還要在Project Seetings裡面Link選項裡加入gmp.lib (或直接將gmp.lib插入工程).
如下面的代碼可以找出一些大素數:
#include <gmp.h>
#include <stdio.h>
int
main(void)
{
int i;
mpz_init(M);
for(i=1;i<1000;i++){
char *p=buf;
int j;
for(j=0;j<i-1;j++){
p[j]='9';
}
p[j]='7';p[j+1]='/0';
mpz_set_str(M, buf, 10);
if(mpz_probab_prime_p(M, 10)){
printf("Possible Prime:10^%d-3/n",i);
}
}
mpz_clear(M);
return 0;
}
此外,我的blog裡面還有些程式會使用GMP,比如計算n!最後面非零的18位元