c++ - 如何正确使用 GMP 来执行此操作?

标签 c++ gmp

我的 C++ 代码

   long long N=1000000000000LL;
   long long a = N;
   mpz_class v;
   mpz_mul(v, a, a); 
   cout<<v<<endl; //I want this to show 1000000000002000000000001
   long long U=((sqrt(4*N+v)-1)/4);  //not sure how to do this in GMP at all
   cout << U << endl; //should show 250000000000

这是一个片段,显示了我想要执行的操作类型。但是我对 GMP 没有足够的经验来了解它,我也不清楚文档。我该如何纠正这一切?

最佳答案

mpz_class 有 no constructor from long long (它只能达到 unsigned long),所以你必须使用一个中间字符串:

#include <gmpxx.h>
#include <iostream>
#include <string>

int main()
{
    long long N = 1000000000000LL;
    mpz_class a(std::to_string(N).c_str());
    mpz_class v = a*a;
    std::cout << v << '\n'; // shows 1000000000000000000000000
    std::cout << (a+1) * (a+1) << '\n'; // THIS shows 1000000000002000000000001

    mpz_class U = ((sqrt(4*a+v)-1)/4);
    std::cout << U << '\n'; // shows 250000000000
}

关于c++ - 如何正确使用 GMP 来执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577182/

相关文章:

c++ - 为什么来自 MSYS2 的 GNU MP (gmplib) 意外地将 ull 转换为 32 位整数?

c++ - 该计划是否违反 ODR?

c++ - 如何通过扩展以下类型特征来删除 decltype(& MyClass::func) 部分?

c++ - 如何从 Mat 变量编辑/读取 OpenCv 中的像素值?

c++ - GLEW _First 是 nullptr

xcode4 - 在 Xcode 4 中使用 GMP——链接问题

c++ - GMP 库 - 文件 I/O

c# - 为什么这个 Explicit P/Invoke 不起作用?

java - 用 Java 封装 GMP

c++ - 在 GMP 中使用载体