此程序的目标是使用欧几里德公式 (a = m^2 -n^2, b = 2mn, c = m^2) 为小于 500 的每个值 (a, b, c) 找到所有勾股三元组+ n^2.) 所以这是我的代码。
int main()
{
clock_t start = clock()/ (CLOCKS_PER_SEC/1000);
for (int m = 1; m <= 500; m++)
{
for (int n = 1; n <= 500; n++)
{
int a = (m*m)-(n*n);
int b = 2*m*n;
int c = (m*m)+(n*n);
if (m > n && a + b == c)
{
cout << a << " + " << b << " = " << c << endl;
}
}
}
clock_t finish = clock()/ (CLOCKS_PER_SEC/1000);
cout << "completed in " <<clock() << " ms";
return 0;
}
我试过了,但我的输出什么也没有。我认为它的工作方式是:对于每个小于/等于 500 且从 1 开始的整数 m,每次都将 1 添加到 m。 n 同样的交易。然后将这些值代入公式,如果 a+b == c,它会打印这些值,从而找到我的三元组。但我没有得到任何输出。
最佳答案
a + b = (m^2 + 2mn - n^2) = (m+n)^2 - 2n^2
c = m^2 + n^2 = (m+n)^2 - 2mn
你需要 a + b = c
--> 2n^2 = 2mn
--> m = n
由于您还需要 m > n
,因此您找不到任何解决方案。
关于c++ - 使用欧几里得公式查找所有毕达哥拉斯三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912898/