转换C ++程序以使用GMP

时间:2012-06-10 19:10:40

标签: c++ gmp

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

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]'

中的'operator []'不匹配

它也不会让我这样做

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

其中x是长的长

1 个答案:

答案 0 :(得分:2)

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

或者,你可以尝试使用类似CLN或其他库的东西,试图更接近C ++的大量替代品。没有我知道的图书馆完全甚至非常好。