Как инициализировать mpz_t в gmp 1024-битным числом из строки символов? - PullRequest
5 голосов
/ 13 июля 2011

Я хочу инициализировать переменную mpz_t в gmp с очень большим значением, таким как большое целое число 1024 бита.Как я могу это сделать?Я новичок в GMP.Любая помощь будет оценена.

Ответы [ 2 ]

7 голосов
/ 13 июля 2011

Использование mpz_import. Например:

uint8_t input[128];
mpz_t z;
mpz_init(z);

// Convert the 1024-bit number 'input' into an mpz_t, with the most significant byte
// first and using native endianness within each byte.
mpz_import(z, sizeof(input), 1, sizeof(input[0]), 0, 0, input);
2 голосов
/ 14 июля 2011

Чтобы инициализировать целое число GMP из строки в C ++, вы можете использовать libgmp++ и непосредственно использовать конструктор:

#include <gmpxx.h>

const std::string my_number = "12345678901234567890";

mpz_class n(my_number); // done!

Если вам все еще нужен необработанный тип mpz_t, скажите n.get_mpz_t().

В Си вы должны изложить это так:

#include <gmp.h>

const char * const my_number = "12345678901234567890";
int err;

mpz_t n;
mpz_init(n);
err = mpz_set_str(n, my_number);    /* check that err == 0 ! */

/* ... */

mpz_clear(n);

См. документацию для дальнейших способов инициализации целых чисел.

...