gpt4 book ai didi

python - 使用高斯(复数)整数生成毕达哥拉斯三元组

转载 作者:行者123 更新时间:2023-11-28 18:14:41 28 4
gpt4 key购买 nike

我最近才发现一种通过 this video 生成毕达哥拉斯三元组的方法解释它,涉及使用高斯(复杂)整数。到目前为止,我已经设法编写了一个函数,该函数返回由每个高斯整数生成的勾股三元组列表,其中虚部小于实部。

def pyt(max_real):
t = []
real = 2
imag = 1
while real <= max_real:
z = complex(real, imag)**2
t.append((z.real, z.imag, abs(z)))
if imag + 1 == real:
real += 1
imag = 1
else:
imag += 1
return t

这个问题是一些三元组(例如 {9, 12, 15})不是通过函数所基于的视频中的初始步骤生成的,我'我不确定如何生成这些。

>>> for i in pyt(4):
print(i)


(3.0, 4.0, 5.0)
(8.0, 6.0, 10.0)
(5.0, 12.0, 13.0)
(15.0, 8.0, 17.0)
(12.0, 16.0, 20.0)
(7.0, 24.0, 25.0)
>>> # missing: (9, 12, 15), possibly others

我将如何着手生成每个 可能的三元组,以某种方式使用我已有的或其他方式?

最佳答案

编辑:我意识到这实际上可能会遗漏一些三元组,请参阅最后一行的通知。

此答案基于您提供的链接。我们将使用以下信息:

  • 我们可以用高斯整数的方法找到所有的三重生成器

  • 任何三元组都是上述生成器之一的倍数

  • 要找到三元组,我们永远不需要将生成器缩放小于 1/2,为我们需要的最大生成器提供上限。

    <

下面是我们如何继续的一些伪代码。有关可能实现的一些细节将在后面。

def pyt(max_real):
max_generator = 2 * max_real
generators = set()

# Find every generator inside our upper bound
for x in [Gaussian integers if abs(x) < max_generator and x.imag < x.real]:
y = x**2
triple = (y.real, y.imag, abs(y))
generators.add(triple)


# Scale up
scaled_up_generators = set()

for a, b, c in generators:

for i in range(max_real / c):
scaled_up_generators.add((i * a, i * b, i * c))

# Scale down
triples = set()

for a, b, c in generators:

common_factors = find_common_factors(a, b, c)
for factor in common_factors:
triples.add((a / factor, b / factor, c / factor))

triples = set()

# Before returning we filter out the triples that are too big.
return filter(lambda triple: triple[2] <= max_real, triples)

上面的代码恢复了所有三重生成器,最多为提供的界限的两倍。然后通过放大和缩小它们,我们恢复边界内的所有三元组。

您可能想看看一种有效的方法来找到实现 find_common_factors 的共同因素,here is a start .

同样,此实现仅基于您链接中提供的信息。此外,它会捕获更多的三元组,但可能无法捕获需要按更精分割数缩放的三元组。可能有更有效的方法进行,但为此我建议转向 MathExchange .

关于python - 使用高斯(复数)整数生成毕达哥拉斯三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113289/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com