三个正整数 x、y、z 的组合,使得 x + y、x - y、y + z、y - z、x + z 和 x - z 都是完全平方数。

5
早上好,我是新来的,有一个小问题想请教。我正在开发一个高效的算法来解决以下问题: 我需要找到三个正整数x、y和z的组合,使得x + y、x - y、y + z、y - z、x + z和x - z都是完全平方数。 问题在于开发一个算法,以找到所有x、y和z之间的组合1至2,000,000。
目前我使用了一个for循环嵌套for循环的方法,但这肯定不会在我有孙子之前结束。

加速孙辈获取,这可能是解决问题的有趣方式;)为好问题点赞。 - kostja
3
限制条件是“1<x,y,z<2000000”还是“1<x+y,x-y,...<2000000”? - High Performance Mark
1
有些情况下了解到每个平方数都是连续两个三角形数之和可能会有所帮助(当然这并不意味着只有三角形数可以成为平方数的和)。 - Waleed Khan
需要满足以下条件:表达式x + y,x - y,y + z,y - z,x和x + z - z的结果都是完全平方数。 其中x,y和z的取值范围在1到2000,000之间。 根据上述表达式,算法要求X>Y>Z,因为如果Y比XZ更大,则xy为负数。 - user2156850
2个回答

4

首先,基本思路是进行替换,例如:

 u = x + y
 v = x - y
 w = y + z

然后 x + y,x - y,y + z,y - z,x + z 和 x - z 变成:
 u, v, w, u - v - w, v + w, u - w   [all have to be squares]

然后再进行另一次替换,令u = a²,v = b²,w = c²,得到:
 a², b², c², a² - b² - c², b² + c², a² - c²    [all have to be squares]

现在你可以枚举所有可能已经足够快的a、b、c。

更进一步的想法是,首先使用勾股三元组(通过将其替换为m和n,枚举所有互质的(m,n),然后使用欧几里得公式)枚举所有b²、c²、b²+c²,然后以类似的方式找到给定(b,c)的a(例如,将a² - c² = x²改为a² = x² + c²,并再次使用三元组)。


所以我有一个想法,开始寻找最终的X和Y来找到答案表达式 X + Y 是完全平方数(无论结果是否在范围内或者是否与其他结果不同),X - Y是完全平方数。有了“X”和“Y”,寻找“Z”,并尝试其他表达式,直到找到有效的组合并存储或打印。像这样开始进行替换的基本思路: u = x + y v = x - y w = y + z看起来不错,我会试着按照这个思路工作。谢谢。 - user2156850

0

扩展BeniBela的答案,

x + y = (x - z) + (y + z)
x + y = (x + z) + (y - z)

因此,三元组仅在可以用两种不同的形式表示斜边时才有效。 进一步的过滤可以通过观察 (x - z) 和 (x + z) 也形成勾股三元组的斜边来完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接