GMP库简单入门教程
本帖最后由 winxos 于 2009-9-29 18:58 编辑论坛里不少老大们的程序用到了GMP库,但是还是有很多新人不太了解VC下GMP的具体使用,我写了一篇简易教程,关于GMP的初步使用,希望对不明白的人有所帮助,如果有好的意见或建议欢迎指出。
[原文链接] http://weolee.spaces.live.com/blog/cns!52FBB34F02E029D9!213.entry
哎呀,粘贴过来格式太乱了,大家还是去上面的链接看吧,下面附上一个文章中提到的下载地址
http://d.namipan.com/sd/929339
包括了一份WOLD 文档以及编译好的静态库跟常用函数手册。 本帖最后由 winxos 于 2009-9-29 19:01 编辑
//一份简易的GMP测试代码
//梅森素数的鲁卡斯测试以及概率测试
#include <iostream>
#include <gmp>
#include <PRIMES.h> //包含了我自己定义的素数相关类,本程序调用了其产生小素数
#include <ctime>
using namespace std;
#pragma comment(lib,"gmp.lib"); //另外一种引用库的方法
int IsMersenne(int ExpP)
{
if (ExpP == 2) return 1;
mpz_t c, b;
mpz_init(c);
mpz_init(b);
mpz_ui_pow_ui(c, 2, ExpP);
mpz_sub_ui(c, c, 1); //M(p) = 2^p-1
mpz_set_ui(b, 4);
for (int j = 0;j < ExpP-2;j++)
{
mpz_mul(b, b, b);
mpz_sub_ui(b, b, 2);
mpz_mod(b, b, c);
}
mpz_clear(c);
if (mpz_cmp_ui(b, 0) == 0)
{
mpz_clear(b);
return 1;
}
mpz_clear(b);
return 0;
}
int IsMersenne2(int ExpP)
{
if (ExpP == 2) return 1;
mpz_t c;
mpz_init(c);
mpz_ui_pow_ui(c, 2, ExpP);
mpz_sub_ui(c, c, 1);
if (mpz_probab_prime_p(c, 5))
{
return 1;
}
return 0;
}
int main()
{
time_t a,b;
PRIMES P;
int i, ct = 0;
a=time(0);
for (i = 900;i < 1100;i++)
{
int ExpP = P.PrimeAt(i);
SetTitle(ExpP);
if (IsMersenne(ExpP))
{
cout<<++ct<<"\t"<<ExpP<<endl;
}
}
b=time(0);
cout<<difftime(b,a)<<"秒"<<endl;
return 0;
} 报告,纳米盘上下载后不能解压。 恩,是纳米盘的问题。纳米盘的http下载下下来的东西不是原件。 3# rogoo96
不知道你这里是什么问题,我刚测试了,我这边是可以下载的,选择的进入HTTP下载 我再试试 现在可以了。
直接用这个地址(纳米盘跳到的):http://cid-6f0a3f68954c2091.skydrive.live.com/self.aspx/NamipanPublic/2009-09-29/easy%5E_gmp.rar http://awtjeq.bay.livefilestore.com/y1pa_R-8c11EQfewejQIQcdlJMNZZOLd6HQKDaiR_UWFenwd_zWySJYm179wO5mvqKQUMqm1XPl4wawujZOyEh_Hg/easy_gmp.rar?download也行
页:
[1]