у меня очень большой показатель, где показатель
e = 26959946667150639794667015087019630673637144422540572481103610249951
(225 бит)
Но, согласно шаблону mpz_pow_ui следующим образом:
void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)
Я думаю, что e не подходит для этой функции, есть ли другой способ вычислить большую экспоненту с использованием GMP C ++?
Не. Если базовое значение возводится в степень, это не -1
, 0
, или же 1
, вы уничтожите основную память (вы полностью превысите доступное виртуальное адресное пространство). Если цель состоит в том, чтобы сделать модульное возведение в степень (где результат Можно вписывается в память, потому что он уменьшен на некоторое число, которое умещается в оперативной памяти), вы хотите mpz_powm
(или же mpz_powm_sec
если вы пишете «настоящий» криптографический код; _sec
вариант защищает от временных атак для восстановления ключа).
Причина, по которой GMP принимает только целое число без знака для этой функции, заключается в том, что показатели произвольной точности в этом случае приводят только к разрывам.
Других решений пока нет …