LINUX.ORG.RU

mpz_powm нипонял

 bignum, , , pow,


0

2

mpz_powm(rop, base, exp, mod) зафига нужен ограничивающий mod ? Типа что-бы не сожрало всю память? Эммм а если мне нужно число которое влезет в память и займёт там 90% то как мне указать этот mod ведь его размер и будет в 90% памяти лол. Или я дурак? Или как оно работает?

Мне типа как-то так ограничение устанавливать?

 mpz_set_str(out1,
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
    ,10);

    mpz_powm(out4,i2,out3,out1);
    mpz_out_str(stdout,10,out4);
    printf("\n");


Повторюсь, а если ограничитель сам размером с пол оперативки? И массив под результат в пол оперативки, то типа я пол оперативки займу чисто mod ограничителем? Чиивооо? Пхххх.

Чво я делаю не так? Покороче ему нельзя сказать как то? А то глупость кака-то или я не понял.

ПЫСЫ первый раз gmp тыкаю

★★★★★

Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

Потому что pow-mod это самостоятельная операция, в основном для криптографии (RSA). Основание степени там примерно такой же длины как и модуль обычно. А если тебе надо просто возвести в степень то ищи без mod (не знаю есть ли там такая).

firkax ★★★★★
()

Я погуглил за тебя и нашёл mpz_pow_ui(), которая тебе точно подойдёт. Не беда, что экспонента в ней число типа unsigned long int. Если экспонента не влезает в unsigned long int, значит результат всё равно не влезет в память, поэтому считать такие числа ты никогда не будешь.

i-rinat ★★★★★
()
Ответ на: комментарий от d

Акстись какой я нафиг в профессии. Так, палочкой тыкаю и всё. Иногда (в большинстве случаев туплю) :D Но я упорствую хехе. Ладно пойду дальше тыкать, если дотыкаю тред сделаю с фигнюшкой прикольной (про которую конечно же все уже знают и уже сами делали) и вообще вот уже есть в репозитории, нафиг ты лесопедишь, займись делом. Фсё я пшол

LINUX-ORG-RU ★★★★★
() автор топика