2016-03-07 1 views
0

i ont une très grande exposant, où l'exposantGMP mpz_pow_ui avec très grand exposant

e = 26959946667150639794667015087019630673637144422540572481103610249951 

(225 Bits)

Mais, selon modèle de mpz_pow_ui comme suit:

void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP) 

Je pense e ne correspond pas à cette fonction, existe-t-il un autre moyen de calculer un grand exposant en utilisant GMP C++?

Répondre

2

Ne pas. Si la valeur de base en cours d'exponentiation est autre que -1, 0 ou 1, vous allez souffler la mémoire principale (vous allez dépasser entièrement l'espace d'adressage virtuel disponible). Si le but est de faire une exponentiation modulaire (où le résultat peut entrer en mémoire car il est réduit mod un certain nombre qui rentre dans la RAM), vous voulez mpz_powm (ou mpz_powm_sec si vous écrivez "vrai" code crypto; la variante _sec se défend contre les attaques de synchronisation pour la récupération de clé).

La raison pour laquelle GMP accepte uniquement un entier non signé pour cette fonction est que les exposants de précision arbitraires n'entraînent que des déchirures dans ce cas.

+0

Wow .. merci beaucoup @ShadowRanger .. Je ne sais pas s'il existe une fonction comme mpz_powm, j'ai besoin de moduler la valeur après que .. – stranger

+0

@stranger: Je me suis dit. Personne n'utilise un exposant aussi grand à d'autres fins. :-) – ShadowRanger