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

Posted

技术标签:

【中文标题】三个正数 x、y、z 的组合,使得 x + y、x - y、y + z、y - z、x + z 和 x - z 是完全平方【英文标题】:Combinations of three positive numbers x, y, z so that x + y, x - y, y + z, y - z, x + z and x - z are perfect squares 【发布时间】:2013-02-26 16:03:33 【问题描述】:

早上好,我是新来的,我带来了一个小问题。我无法为以下问题开发有效的算法: 我需要找到三个正数 x、y 和 z 的组合,以便 x + y、x - y、y + z、y - z、x + z 和 x - z 是完美的正方形。 问题是要开发一种算法来找到 x、y 和 z 在 1 之间的所有组合 和 2,000,000。

目前我在for 中使用for,在我有孙子之前肯定不会结束。

【问题讨论】:

那么,加速获得孙子,可能是解决这个问题的有趣方法;)+1 提出好问题 约束是1<x,y,z<2000000还是1<x+y,x-y,...<2000000 在某些情况下,知道every square is the sum of two consecutive triangular numbers 可能会有所帮助(尽管这当然并不意味着只有三角数和平方)。 表达式 x + y、x - y、y + z、y - z、x 和 x + z - z 的结果必须是完全平方。使得 x、y 和 z 在 1 到 2000,000 之间。由此该算法似乎实现了要求 X> Y> Z,因为根据上述表达式 xy 为负,如果 Y 将高于 XZ。 【参考方案1】:

从替换开始的基本思想,例如:

 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-s。

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

【讨论】:

于是我有了开始寻找终极 X 然后 Y 来寻找答案的想法 X + Y 是一个完美的正方形(无论结果是否在范围内或与其他结果),X - Y 是完全平方。让“X”和“Y”寻找“Z”,其他表达式实现,直到您找到有效的组合并存储或打印。 BeniBela “从替换开始的基本想法,例如:u = x + y v = x - y w = y + z”似乎是个好主意,我会尝试使用它。谢谢【参考方案2】:

扩展BeniBela's answer,

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

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

【讨论】:

以上是关于三个正数 x、y、z 的组合,使得 x + y、x - y、y + z、y - z、x + z 和 x - z 是完全平方的主要内容,如果未能解决你的问题,请参考以下文章

三个未知数乘积相加等于一个固定值,,怎么用EXCEL计算三个未知数组合?

C语言,输入三个整数,X, Y,Z,请把这三个数有小到大输出

在数组中找出x+y+z=0的组合

输入三个整数x,y,z,请把这三个数由小到大输出。。

高校排名

输入三个整数x,y,z,请把这三个数由小到大输出