早上好,我是新来的,我带来一个小问题。我无法为以下问题开发有效的算法: 我需要找到三个正数x,y和z的组合,以便x + y,x - y,y + z,y - z,x + z和x - z是完美的正方形。 问题是开发一种算法,找到1,x和y之间的所有组合 和2,000,000。
目前我在for
内使用for
,在我有孙子孙女之前肯定不会结束。
答案 0 :(得分: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-s。
进一步的想法可能是首先使用Pythagorean triples枚举所有b²,c²,b²+c²(通过将其替换为m和n,枚举所有互质(m,n)然后使用Euclid公式)然后找到对于给定的(b,c),以类似的方式(例如,将a²-c²=x²改为a = =x²+c²并再次使用三元组)。
答案 1 :(得分:0)
x + y = (x - z) + (y + z)
x + y = (x + z) + (y - z)
因此,只有当斜边可以用两种不同的形式表示时,三元组才有效。 可以通过观察(x - z)和(x + z)也形成毕达哥拉斯三重态的斜边来进行进一步的滤波。