5

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

目前我使用一个forfor我有孙子之前肯定不会结束的内。

4

2 回答 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、cs。

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

于 2013-03-11T13:50:52.977 回答
0

扩展BeniBela 的答案

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

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

于 2013-03-11T15:35:27.237 回答