将C++程序转换为使用 GMP

Converting a C++ program to use GMP

本文关键字:GMP C++ 程序转换      更新时间:2023-10-16

我的程序中的所有变量都使用以下数据类型

typedef long long ll;

我安装了GMP并尝试这样做:

typedef mpz_class ll;

我试过了

typedef mpz_t ll;

但它不会编译,通常会出现大量"无效运算符"错误。有没有更简单的方法来翻译东西?

示例错误:

ll a = sqrt(static_cast<double>(n/2));

来自类型 __gmp_expr<__mpz_struct[1], __gmp_binary_expr<mpz_class, long int, __gmp_binary_divides> >' to type Double 的无效static_cast

另一个:

count-=myArr[m];

与"myArr[m]"中的"运算符[]"不匹配

它也不会让我做

 mpz_t count;
 count = (x*x-1);

其中 x 是长长

首先,mpz_t没有任何运算符重载,因为它是一个 C 结构,而不是一个C++类。接下来,mpz_class的行为有点像整数,因为它有一些基本的运算符重载。但是,它绝对不能作为其他类型整数值的直接替代品。您必须通过程序并通过将当前代码替换为将处理mpz_class值的下一个代码来修复所有错误。没有简单的方法可以做到这一点:您必须咬紧牙关并学习如何有效地使用GMP。

或者,您可以尝试使用 CLN 或其他库之类的东西,这些库试图更接近于大数字插入式替换C++。据我所知,没有一个库可以完全或甚至非常好地做到这一点。