python - 简单地将 1 加到一个大数上不起作用?(Python 3.9)
问题描述
注意:我在 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))
解决方案
k = (exponent - 2) / 4
k
生成 a ,这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
推荐阅读
- r - 使用 rsample 从评估拆分中删除观察结果
- c# - 迁移到 .Net Core v3.1 后 IAsyncQueryProvider 生成错误
- php - 从 php(变量)运行 bash 交互式脚本(带输入)
- java - 为什么实例只能被主要方法看到
- python - 删除pandas df中每一行的字符串中的最后一个字符
- html - 在引导行中对齐 mat-spinner
- sdk - 交互式多点触控应用的框架推荐
- python-3.x - 如何使用 conda-build“使用 CLI 选项进行构建”?
- python - Keras TLSTM ext 分类不同的训练和测试形状
- java - 不允许多次按下按钮