winxos 发表于 2009-9-29 18:54:21

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 18:58:46

本帖最后由 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;
}

rogoo96 发表于 2009-10-1 09:49:32

报告,纳米盘上下载后不能解压。

Frankenstein 发表于 2009-10-1 17:33:10

恩,是纳米盘的问题。纳米盘的http下载下下来的东西不是原件。

winxos 发表于 2009-10-1 19:46:13

3# rogoo96
不知道你这里是什么问题,我刚测试了,我这边是可以下载的,选择的进入HTTP下载

rogoo96 发表于 2009-10-1 22:49:48

我再试试

rogoo96 发表于 2009-10-1 22:53:00

现在可以了。
直接用这个地址(纳米盘跳到的):http://cid-6f0a3f68954c2091.skydrive.live.com/self.aspx/NamipanPublic/2009-09-29/easy%5E_gmp.rar

rogoo96 发表于 2009-10-1 22:54:44

http://awtjeq.bay.livefilestore.com/y1pa_R-8c11EQfewejQIQcdlJMNZZOLd6HQKDaiR_UWFenwd_zWySJYm179wO5mvqKQUMqm1XPl4wawujZOyEh_Hg/easy_gmp.rar?download也行
页: [1]
查看完整版本: GMP库简单入门教程