早上好,我是新来的,我带来了一个小问题。我在为以下问题开发高效算法时遇到了麻烦:我需要找到三个正数 x、y 和 z 的组合,以便 x + y、x - y、y + z、y - z、x + z 和x - z 是完美的正方形。问题是开发一种算法,可以找到 1 到 2,000,000 之间的所有 x、y 和 z 组合。
目前我使用一个for
在for
我有孙子之前肯定不会结束的内。
早上好,我是新来的,我带来了一个小问题。我在为以下问题开发高效算法时遇到了麻烦:我需要找到三个正数 x、y 和 z 的组合,以便 x + y、x - y、y + z、y - z、x + z 和x - z 是完美的正方形。问题是开发一种算法,可以找到 1 到 2,000,000 之间的所有 x、y 和 z 组合。
目前我使用一个for
在for
我有孙子之前肯定不会结束的内。
从替换开始的基本思想,例如:
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² 并再次使用三元组)。
扩展BeniBela 的答案,
x + y = (x - z) + (y + z)
x + y = (x + z) + (y - z)
因此,只有当斜边可以用两种不同的形式表示时,三元组才有效。进一步的过滤可以通过观察 (x - z) 和 (x + z) 也形成毕达哥拉斯三元组的斜边来完成。