标签: gmp

使用GMP的bignum方根

我需要准确地得到210位数的平方根,我认为GMP是正确的工具,我做错了什么?

#include <stdlib.h>
#include <stdio.h>
#include "gmp.h"

int
main (int argc, char *argv[])
{
  mpz_t sq_me, sq_out, test;
  mpz_init(sq_me);
  mpz_init(sq_out);
  mpz_init(test);
  mpz_set_str (sq_me, argv[1], 10);

  mpz_sqrt(sq_out, sq_me);
  mpz_mul(test,sq_out,sq_out);

  gmp_printf ("%Zd\n\n", sq_out);
  gmp_printf ("%Zd\n\n", test);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输入:

24524664490027821197651766357308801846702678767833275974341445171506160083003858 72169522083993320715491036268271916798640797767232430056005920356312465612184658 17904100131859299619933817012149335034875870551067

输出:

49522383313031109809242226159886283348695660460381271324714928680654813093947239 9634016783775955618921028

24524664490027821197651766357308801846702678767833275974341445171506160083003858 72169522083993320715491034366358025027526868495267716284867043049443779615862887 47102011391915422793532619329760963626718900576784

c gmp bignum

6
推荐指数
2
解决办法
5802
查看次数

使用gmp有效地考虑大量因素

我需要得到大数的所有素数因子,这些因子可以很容易地达到1k位.这些数字实际上是随机的,所以它应该不难.我该如何有效地做到这一点?我使用C++和GMP库.

编辑:我猜你们都误解了我.
我的意思是素数是得到数字的所有素因子.
对不起我的英语,在我的语言素数和因素是相同的:)


澄清(来自OP的其他帖子):

我需要的是一种使用C++和GMP(Gnu Multiple Precession lib)有效地计算(找到数字的素数因子)大数(可能达到2048位)的方法,或者更不用说任何其他方式.这些数字实际上是随机的,所以几乎没有机会难以分解,即使这个数字难以计算,我也可以重新编号(尽管不能选择).

c++ math primes gmp factorization

6
推荐指数
2
解决办法
7667
查看次数

找不到gmp共享库

我在C中有一个非常简单的GMP程序(下面)

#include <stdio.h>
#include <gmp.h>

int main() {
    mpf_t a, b, inter;
    mpf_init(a);
    mpf_init(b);
    mpf_init(inter);
    mpf_set_d(a, 3.0);
    mpf_set_d(b, 5.0);
    mpf_add(inter, a, b);
    gmp_printf("%F+%F=%F\n", a, b, inter);
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它编译正常,但在运行时,它会产生

error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

怎么了?

c shared-libraries gmp

6
推荐指数
1
解决办法
2万
查看次数

有没有人有工作的GMP + MINGW安装?

我花了几天时间尝试在MINGW windows安装上安装GMP库.我完成了几十次的安装过程,遵循互联网上的任何单一指南,但我无法让事情发挥作用.所以,我迫不及待地请某人帮助我强行解决这个问题:是否有人在GMP上成功构建并正在进行工作mingw(32位)安装?有人拉链并以某种方式发送给我吗?喜欢在mediafire/megaupload上传它并共享链接?我知道这不是很优雅,但我真的很绝望.我只需要在MINGW上安装GMP,可能会编译c ++源代码,这样我就可以直接使用运算符重载,但C版本也可以.

请有人帮忙,因为这个血腥的图书馆,我无法完成我的工作

再次感谢你

马特奥

c c++ mingw gmp mingw32

6
推荐指数
1
解决办法
4573
查看次数

安装时出现Math :: GMP错误

我试图安装,Math::GMP但它一直在失败,我不知道从哪里去.这就是我输入的内容,这里是指向日志文件的输出:

[root@confeng Math-GMP-2.06-VEVNp7]# cpanm Math::GMP
--> Working on Math::GMP
Fetching http://www.cpan.org/authors/id/T/TU/TURNSTEP/Math-GMP-2.06.tar.gz ... OK
Configuring Math-GMP-2.06 ... OK
Building and testing Math-GMP-2.06 ... FAIL
! Installing Math::GMP failed. See /root/.cpanm/build.log for details.
[root@confeng Math-GMP-2.06-VEVNp7]#
Run Code Online (Sandbox Code Playgroud)

我检查了日志,我不知道我应该在这里有什么结构的日志 /root/.cpanm/build.log

cpanm (App::cpanminus) 1.5011 on perl 5.008008 built for i386-linux-thread-multi
Work directory is /root/.cpanm/work/1336128898.6464
You have make /usr/bin/make
You have /usr/bin/wget
You have /bin/tar: tar (GNU tar) 1.15.1
You have /usr/bin/unzip
Searching Math::GMP on cpanmetadb ...
--> Working on Math::GMP
Fetching http://www.cpan.org/authors/id/T/TU/TURNSTEP/Math-GMP-2.06.tar.gz
-> OK …
Run Code Online (Sandbox Code Playgroud)

perl gmp

6
推荐指数
1
解决办法
6786
查看次数

相对于MPIR,GMP有什么优势吗?

两者似乎都是不错的bignum图书馆,但我不确定每个图书馆的优点/缺点.我知道这是一个广泛的问题,但我主要是在突出的差异之后.

c++ gmp

6
推荐指数
1
解决办法
1716
查看次数

C++提升大数量存储

所以根据我之前提出问题,我下载并设置了boost.我有这个代码:

#include <stdlib.h>
#include <boost\multiprecision\gmp.hpp>
using namespace std;
using namespace boost::multiprecision;

void main() {
    mpz_int N(567014094304930933548155069494723691156768423655208899778686163624192868328194365094673392756508907687565332345345678900976543567890976543565789054335678097654680986564323567890876532456890775646780976543556789054367890765435689876545898876587907876535976565578907654538790878656543687656543467898786565457897675645657689756456578656456768654657898865567689656890795587907654678798765787897865654657897654678965465786867278762795432151914451557727529104757415030674806148138138281214236089749601911974949125689884222023119844272122501649909415937);

}
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时说

IntelliSense: integer constant is too large
Run Code Online (Sandbox Code Playgroud)

如果mpz_int不是我应该使用的,那么我应该使用什么来提升大量的int?

c++ int boost gmp c++11

6
推荐指数
1
解决办法
2393
查看次数

在Mac OS 10.8上使用dev/urandom生成非常慢的随机数

我正在编写一个使用Paillier Cryptosystem来加密矩阵的程序.要加密50 x 50矩阵,大约需要12秒!考虑到我打算加密大小为5000 x 5000及以上的矩阵,这是痛苦的.在Xcode上分析程序我发现这个paillier_get_rand_devurandom()是罪魁祸首.

这是调用跟踪快照:

在此输入图像描述

这是此特定Paillier C库函数的源代码

    void paillier_get_rand_devurandom( void* buf, int len )
    {
          paillier_get_rand_file(buf, len, "/dev/urandom");
    }  


    void paillier_get_rand_file( void* buf, int len, char* file )
   {
         FILE* fp;
         void* p;

         fp = fopen(file, "r");

         p = buf;
         while( len )
         {
             size_t s;
             s = fread(p, 1, len, fp);
             p += s;
             len -= s;
         }

        fclose(fp);
    }
Run Code Online (Sandbox Code Playgroud)

如果是的话,

    <http://www.en.wikipedia.org/wiki/Paillier_cryptosystem>
    Paillier Cryptosytem C library : <http://acsc.cs.utexas.edu/libpaillier/> 
Run Code Online (Sandbox Code Playgroud)

我已经读过使用dev/random的随机数生成很慢而使用dev/urandom则更快.在我的情况下,两者都同样缓慢.这个随机数生成能否更快?

编辑:这是一个例子

    #include <stdio.h>
    #include <stdlib.h>
    #include <gmp.h>
    #include<paillier.h> …
Run Code Online (Sandbox Code Playgroud)

c random cryptography gmp xcode4

6
推荐指数
1
解决办法
1010
查看次数

如何序列化GMP有理数?

有没有办法以二进制形式序列化GMP有理数?我只看到读取/写入a的函数FILE,但即便如此,它也是一种文本形式.我可以转换为分子/分母并使用整数函数,但同样只有FILE输出可用.我需要能够获取原始字节或写入C++流.

c++ gmp

6
推荐指数
1
解决办法
1150
查看次数

我是否应该期望 GMP 的 mpf_class 比原始数据类型 double 慢得多?

我正在编写一个 C++ 程序来生成 Mandelbrot 集缩放。我所有的复数最初都是两个double(一个代表实部,一个代表复数部分)。这工作得相当快;对于我生成的图像类型,每帧 15 秒。

由于缩放效果,我想提高更多放大帧的精度,因为这些帧在 和 之间的差异非常min_xmax_x。我向 GMP 寻求帮助来解决这个问题。

现在,速度要慢得多;每帧 15:38 分钟。图像的设置与之前相同,算法也相同。唯一改变的是我使用的是mpf_class需要精确的小数(即只是复数)。为了比较性能,我使用了与 double 相同的精度:mpf_set_default_prec(64);

GMP是否改变精度mpf_class来满足表达的需要?换句话说,如果我有两个 64 位mpf_class对象,我用它们进行计算并将结果存储在另一个对象中mpf_class,精度是否可能会提高?我认为随着时间的推移,这会破坏性能,但我不确定这就是导致我的问题的原因。

我的问题:这种性能下降是否只是 GMP 和其他任意精度库的本质?你会给出什么建议?

编辑 1
我正在(即一直)使用-O3标志进行优化。我还进行了一项测试,以验证 GMP 不会自动提高对象的精度mpf_class。因此,问题仍然在于性能急剧下降的原因。

编辑 2
作为一个演示性示例,我将以下代码编译g++ main.cpp -lgmp -lgmpxx一次,如下所示,并将 everydouble替换为mpf_class. 用double它跑了 12.75 秒,用mpf_class它跑了 24 分 54 分钟。当它们的精度相同时,为什么会出现这种情况?

#include <gmpxx.h>

double linear_map(double d, double a1, double …
Run Code Online (Sandbox Code Playgroud)

c++ performance gmp

5
推荐指数
1
解决办法
742
查看次数