0

Python でモンゴメリー乗算の実装を作成しようとしています。Python の long の GMP に相当するものが必要ですmpz_getlimbn()が、私の人生では見つけられないようです。

どんな助けでも大歓迎です。

編集

以下を実装しましたが、GMP では発生しない手足のインデックス範囲外エラーが発生します。

def unpack(x, b):
    if gmpy2:
        return [long(x) for x in gmpy2.unpack(gmpy2.mpz(x), b)]

    b = 2 ** b
    r = []
    while x:
        x, temp = divmod(x, b)
        r.append(temp)
    return r
4

1 に答える 1

1

私はあなたを修正unpack()しましたが、それは私にとってはうまくいくようです。それでもエラーが発生する場合は、エラー全体を投稿してください。

>>> import gmpy2
>>> 
>>> def unpack(x, b):
...     try:
...         return [x for x in gmpy2.unpack(gmpy2.mpz(x), b)]
...     except NameError:
...         b = 2 ** b
...         r = []
...         while x:
...             x, temp = divmod(x, b)
...             r.append(temp)
...         return r
... 
>>> unpack(123456**7, 15)
[mpz(0), mpz(0), mpz(4096), mpz(25855), mpz(24508), mpz(31925), mpz(15111), mpz(10775)]
>>> del(gmpy2)
>>> unpack(123456**7, 15)
[0, 0, 4096, 25855, 24508, 31925, 15111, 10775]

を使用した場合、使用されたことを示すようにgmpy2結果を残しました。mpzgmpy2

Python の長整数型は、15 ビットまたは 30 ビットを格納するリムを使用します。sys.int_infoシステムの仕様を提供します。

ところで、私は維持gmpy2しており、誰かが を使用しているのを見るのはうれしいですunpack()

于 2014-05-10T07:01:06.197 に答える