GMPY2(或GMP)是否具有pow()功能?

时间:2014-05-17 20:29:03

标签: python gmp gmpy

GMPY2(或GMP)具有powmod功能,但除了python的本地pow之外,我找不到任何常规取幂的内容。 mpz整数是否存在这样的函数?

3 个答案:

答案 0 :(得分:7)

只需使用Python的标准pow()函数或指数**运算符。 GMPY2的mpz类型重载了所有标准的特殊方法,因此您应该能够使用标准的Python命令。

例如:

>>> from gmpy2 import mpz
>>> pow(mpz(3),7)
mpz(2187)
>>> pow(mpz(3),7,13)
mpz(3)
>>> mpz(3)**7
mpz(2187)
>>> 

对于divmod()等也是如此。

答案 1 :(得分:1)

Sure it does

  

void mpz_pow_ui (mpz_t rop, const mpz_t base, unsigned long int exp)
  void mpz_ui_pow_ui (mpz_t rop, unsigned long int base, unsigned long int exp)

     

将rop设置为base to exp。情况0 ^ 0产生1。

当然没有mpz_pow(...)会占用两个mpz_t输入参数。这样做的原因是,如果内存服务,因为unsigned long被认为是足够的,而mpz_t e, b的{​​{1}}可能很容易在内存要求方面变得不成比例。我似乎无法找到提出索赔的邮件列表帖子,但是当我这样做时,我会发布参考文献。


编辑:我似乎没有找到一个纯b^e函数而没有用于Python的模块化算法,但可能是我不够努力的情况。但我确实看到pow函数,这意味着您可以implement your own pow(也this)。

答案 2 :(得分:0)

一些效果信息:

即使考虑到施工因素,gmpy2 pow的速度也是python的两倍:

VideoOutput

可以在mpz上使用内置的>>> timeit.timeit('pow(98765, 10)', number=100000) 0.048412954514788 >>> timeit.timeit('pow(gmpy2.mpz(98765), 10)', number=100000, setup='import gmpy2') 0.024286470230094892 ,但使用powmod的速度提高约10%。

pow(x,y,modulus)

gmpy2版本比具有模数的原生python快得多(有时快10倍)。使用powmod只比使用pow / mpz快一点,因为mpz的构建时间。

如果你已经拥有一个mpz,那么powmod和pow就是非常相同的。