简单地把1加到一个大数字上不起作用?(Python 3.9)

2024-06-26 14:51:59 发布

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

注意:我在Python方面没有那么丰富的经验,因此我的代码可能没有它可能/应该的那么好

我正在尝试创建一个工具,以便于计算某种形式的数字的代数因子(参见https://en.wikipedia.org/wiki/Aurifeuillean_factorization)。这主要是作为一次测试/学习体验,但我在尝试计算参数“c”时遇到了一个问题,该参数定义为2^(2k+1)+1。添加步骤对我不起作用。我只是得到返回值2^129,而不是我希望得到的2^129+1。这是Python本身的问题,还是我在这方面犯了某种错误

代码:

import math


def make_aurifeuille_factors(base, exponent):
    if base == 2 and exponent % 4 == 2:
        k = (exponent - 2) / 4
        c = int(1 + 2 ** (2*k + 1))
        d = int(2 ** (k + 1))
        L = c + d
        M = c - d

        return int(k), int(c), int(d), int(L), int(M)


def gcd(a, b):
    return int(math.gcd(a, b))


print(make_aurifeuille_factors(2, 258))

Tags: 工具代码base参数makereturndefmath
1条回答
网友
1楼 · 发布于 2024-06-26 14:51:59

k = (exponent - 2) / 4使k成为float,这意味着您可能会在后续计算中引入数值错误。使用整数除法从一开始就停留在int世界中:

def make_aurifeuille_factors(base, exponent):
    if base == 2 and exponent % 4 == 2:
        k = (exponent - 2) // 4
        c = 1 + 2 ** (2*k + 1)
        d = 2 ** (k + 1)
        L = c + d
        M = c - d

        return k, c, d, L, M 

相关问题 更多 >