如何在知道三个信息的情况下获得三个数字的值

how to get value of three numbers knowing three information

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

答案应该是x = 20, y = 21, z = 29

我试图用三个未知数的两个方程来求解它,但我失败了。获得解决方案的任何提示?我想找到一种算法或方程来构建解决此问题的 java 代码

我假设 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 意味着您的解决方案具有 "small" 个值。

所以在您的代码中,改变三个参数 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 相矛盾。所以我的算法不需要改变。

扩展 ,采用 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。

这使得问题更容易暴力破解。

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

这是我解决问题的代码

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; }}