VC编程之GMP大数库VC使用入门教程
小标 2019-04-02 来源 : 阅读 1309 评论 0

摘要:本文主要向大家介绍了VC编程之GMP大数库VC使用入门教程,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之GMP大数库VC使用入门教程,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之GMP大数库VC使用入门教程

GMP大数库VC使用入门教程


Winxos 2009-9-29


GMPGUN的一套大数库,提供了数百个基础函数,执行效率比较高,但是网上相对来说详细的教程比较少,本教程为大家介绍如何在windows vc6.0开发环境下,配置和使用GMP库。


附件包括gmp编译好的静态库文件gmp.h gmp.lib 以及一份word文档和gmp函数手册


一、 编译GMP


直接从GMP主页上下载到的GMP源代码,在windows环境下编译起来相对比较麻烦,所以我还是推荐大家直接使用我已经编译好的库,附件中已经包含。


(使用我编译好的库与你们自己编译的库就是一些参数不同,可能效率有点不一样,但是我们不用管这些细微的差异,主要是看看如何使用GMP库吧)


二、 配置库


编译好的库文件包含gmp.h, gmp.lib两个文件,为了以后编程的方便,建议将这两个文件放到VC系统库目录,这样以后编程的时候就可以具体调用了。


具体的做法:


将gmp.h文件放置到VC头文件目录中,在我电脑中对应的目录为


E:\Program Files\Microsoft Visual Studio\VC98\Include


将gmp.lib文件放置到VC库文件目录中,在我电脑中对应的目录为


E:\Program Files\Microsoft Visual Studio\VC98\Lib


注:如果你的VC装在不同的目录,找到对应的地方就可以了


好了,万事具备了,可以开始编写程序了


三、 编写程序


打开VC6.0,新建一个WIN32 CONSOLE工程(默认的HELLO WORLD 就可以),对工程进行如下设置:


选择 工程 -> 设置 ,如下图


弹出的对话框进行如下图设置,目的是为了添加gmp.lib库文件到工程。


好了,确定完后就可以代码编写了。


在主程序文件输入以下代码:


#include "" 
#include <gmp.h> 
 main( argc, * argv[])
{
 mpz_t t; 
 mpz_init(t); 
 mpz_ui_pow_ui(t,2,100); 
 gmp_printf("",t); 
 mpz_clear(t);
  0;
}


编译,运行结果如下:


是不是比较简单呢?相信您一定跃跃欲试了吧^_^


四、 高级教程


对于刚开始使用GMP库来说,就是不知道有哪些函数,容易被它繁多的函数吓到,到官方主页上去,就可以找到最新的帮助文档,英文的。


实际上可以发现它的众多函数命名是比较有规律的,而且对于大数运算来说常用的函数并不多。附件中包含了常用整数函数手册。


GMP的函数命名通常为


mpz_funxx_dataxx


其中funxx表示函数功能,dataxx表示数据类型,dataxx省略通常表示数据都是大数


举例如下:


mpz_t t;

mpz_init(t);

mpz_set_ui(t,2);



mpz_set_str(t, ”1234”);

mpz_add(t,a,b);

mpz_add_ui(t,a,uib);

mpz_add_ui(t,t,1);

mpz_sub(t,a,b);

mpz_mul(t,a,b);

gmp_printf(“%Zd”, t);


其他的类似,请参考手册。


注:如果要熟练还是要多多的练习,应该涉及大数的问题应该不是什么问题了,不过好的算法才是王道。本篇文章意在给那些想处理大数确不知如何使用GMP库的人,winxos自己也是初学者,如果有什么错误恳请指出,一起学习。


再附上一些完整的使用GMP的C++代码。
程序一、

#include <iostream>
#include <gmp>
#include <PRIMES.h> 
#include <ctime>
  std;
#pragma comment(lib,""); 
 IsMersenne( ExpP)
{
  (ExpP == 2)  1;
 mpz_t c, b;
 mpz_init(c);
 mpz_init(b);
 mpz_ui_pow_ui(c, 2, ExpP); 
 mpz_sub_ui(c, c, 1);   
 mpz_set_ui(b, 4);
  ( 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);
  (mpz_cmp_ui(b, 0) == 0)
 {
  mpz_clear(b);
   1;
 }
 mpz_clear(b);
  0;
}
 IsMersenne2( ExpP)
{
  (ExpP == 2)  1;
 mpz_t c;
 mpz_init(c);
 mpz_ui_pow_ui(c, 2, ExpP);
 mpz_sub_ui(c, c, 1);
  (mpz_probab_prime_p(c, 5))
 {
   1;
 }
  0;
}
 main()
{
 time_t a,b;
 PRIMES P;
  i, ct = 0;
 a=time(0);
  (i = 900;i < 1100;i++)
 {
   ExpP = P.PrimeAt(i);
  SetTitle(ExpP);
   (IsMersenne2(ExpP))
  {
   cout<<++ct<<""<<ExpP<<endl;
  }
 }
 b=time(0);
 cout<<difftime(b,a)<<""<<endl;
  0;
}

程序二、

 e20()
{
 mpz_t n;
  i,sum=0;
 mpz_init_set_ui(n,1);
  (i=2;i<=100;i++)
 {
  mpz_mul_ui(n,n,i);
 }
 gmp_printf("",n);
  (mpz_cmp_ui(n,0)>0)
 {
  sum+=mpz_fdiv_ui(n,10);
  mpz_div_ui(n,n,10);
 }
 printf("",sum);
 mpz_clear(n);
  0;
}

   

以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程