0

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を理解するのに十分な経験がなく、ドキュメントが不明確です。これをすべて修正するにはどうすればよいですか?

4

1 に答える 1

2

mpz_class には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
}
于 2012-11-27T04:05:38.283 に答える