RosettaCodeData/Task/Arbitrary-precision-integers--included-/C++/arbitrary-precision-integers--included-.cpp
2018-06-22 20:57:24 +00:00

23 lines
883 B
C++

#include <iostream>
#include <boost/multiprecision/gmp.hpp>
#include <string>
namespace mp = boost::multiprecision;
int main(int argc, char const *argv[])
{
// We could just use (1 << 18) instead of tmpres, but let's point out one
// pecularity with gmp and hence boost::multiprecision: they won't accept
// a second mpz_int with pow(). Therefore, if we stick to multiprecision
// pow we need to convert_to<uint64_t>().
uint64_t tmpres = mp::pow(mp::mpz_int(4)
, mp::pow(mp::mpz_int(3)
, 2).convert_to<uint64_t>()
).convert_to<uint64_t>();
mp::mpz_int res = mp::pow(mp::mpz_int(5), tmpres);
std::string s = res.str();
std::cout << s.substr(0, 20)
<< "..."
<< s.substr(s.length() - 20, 20) << std::endl;
return 0;
}