把Python长成四肢

2024-05-14 08:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用Python编写一个Montgomery multiplication的实现,我需要一个与GMP的^{}相当的Python实现,但我一辈子都找不到。你知道吗

任何帮助都将不胜感激。你知道吗

编辑

我已经实现了以下内容,但是我得到了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

Tags: 编辑returnifdef错误templonggmpy2
1条回答
网友
1楼 · 发布于 2024-05-14 08:19:38

我修改了你的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时,我将结果保留为mpz,以显示使用了gmpy2。你知道吗

Python的long integer类型使用存储15或30位的分支。sys.int_info将为您的系统提供详细信息。你知道吗

顺便说一句,我维护gmpy2,很高兴看到有人使用unpack()。你知道吗

相关问题 更多 >

    热门问题