知道三个信息如何获得三个数字的价值

时间:2017-08-09 00:23:32

标签: java math equations

我正在尝试解决一个问题,我需要知道一些信息才能获得三个未知数(x,y,z)的值。它们的总和等于70x^2 + y^2 = z^2x < y < z

答案应为x = 20, y = 21, z = 29

我尝试将其解决为三个未知数中的两个方程但我失败了。获得解决方案的任何提示?我想找到一个算法或方程来构建解决这个问题的java代码

3 个答案:

答案 0 :(得分:1)

我假设x,y和z必须是正整数,因为删除整数限制允许无限多个解。这是一个算法 - 我会把代码留给你。

您的第二个等式x^2 + y^2 = z^2表示x,y和z构成Pythagorean triple。该等式的所有解都具有

形式
x = k(m^2 - n^2), y = 2kmn, z = k(m^2 + n^2)

(可能有x和y交换)其中m,n和k是正整数,m > n,m和n中的一个是偶数,另一个是奇数,而(m,n)是相对素数。你可以放弃对m和n的最后两个限制,这是为了使三元组具有唯一的表示。

你的第三个限制x < y < z只是从三个值中得到一个独特的三元组。重要的是,您的第一个限制x + y + z = 70意味着您的解决方案具有“小”值。

因此,在您的代码中,改变三个参数k,m和n。只有有限数量的值允许x,y和z之和小于或等于70,这对k,m和n设置了限制。找到相等的x,y和z之和为70.你可以通过不让m和n都是偶数或两者都是奇数来减少一半的试验数。您还可以通过仅改变m和n并计算k应该是什么来避免显式改变k,因为x,y,z中的每一个都与k成比例变化,并且只接受整数k。

这有点像蛮力解决方案,但它很容易编程,并且比仅尝试x,y和z的所有值更快。

编辑:我现在看到x,y和z也可能为零。从理论上讲,这意味着你需要测试x = 0,但从那以后y^2 = z^2显然不可能与y < z相矛盾。所以我的算法不需要改变。

答案 1 :(得分:1)

展开@RoryDaulton's answer,抓取x = k(m^2 - n^2)y = 2kmnz = k(m^2 + n^2)并应用和约束为我们提供

2*k*m*(m + n) = 70

或者

k * m * (m + n) = 35 = 7 * 5 = 35 * 1

需要注意的重要一点是,上述RHS只有两个独特因素; LHS有。因此, LHS的至少一个因子(kmm + n必须为1。

由于mn是唯一的正整数,m + n 总是大于1.因此,

k = 1 or m = 1

其余LHS因子的唯一可能值是7和5 35和1.

这使问题更容易暴力。

答案 2 :(得分:0)

我已经解决了这个问题,我要感谢所有帮助过我的人。

这是我解决问题的代码

int x,y,z;
  long mul=0;   
for(int n=1;n<=sum;n++){
for (int m=2;m<=sum;m++){
    x= (int) ((Math.pow(m,2)) - (Math.pow(n,2)));
    y= 2*m*n;
    z= (int) ((Math.pow(m,2)) + (Math.pow(n,2)));
 if(x+y+z == sum){
     mul = x*z*y;
 }
}}
   return mul; }}