【发布时间】:2016-10-17 01:44:20
【问题描述】:
我想找到方程的所有正整数解
a^3 + b^3 = c^3 + d^3 其中 a,b,c,d 是 1 到 1000 之间的整数;
for (int a = 1; a <= 1000; ++a)
{
for (int b = 1; b <= 1000; ++b)
{
for (int c = 1; c <= 1000; ++c)
{
for (int d = 1; d <= 1000; ++d)
{
if (Math.Pow(a, 3) + Math.Pow(b, 3) == Math.Pow(c, 3) + Math.Pow(d, 3))
{
Console.WriteLine("{0} {1} {2} {3}", a,b,c,d);
}
}
}
}
我知道d = Math.Pow(a^3 + b^3 - c^3, 1/3),所以
for (int a = 1; a <= 1000; ++a)
{
for (int b = 1; b <= 1000; ++b)
{
for (int c = 1; c <= 1000; ++c)
{
int d = (int)Math.Pow(Math.Pow(a, 3) + Math.Pow(b, 3) - Math.Pow(c, 3), 1/3);
if (Math.Pow(a, 3) + Math.Pow(b, 3) == Math.Pow(c, 3) + Math.Pow(d, 3))
{
Console.WriteLine("{0} {1} {2} {3}", a,b,c,d);
}
}
}
}
但是第二种算法产生的结果数量要少得多。我的代码中的错误在哪里?
我尝试(double)1/3,但第二个算法给我的结果仍然比第一个少
【问题讨论】:
-
1/3 为 0,因为您在进行整数除法。所以,
d总是 1。试试(double)1/3 -
尝试将 1/3 转换为
double。 -
d 不应该是 int。注意舍入误差。
-
我尝试了
(double)1/3,但第二种算法给我的结果仍然少于第一种算法