我试图得到所有的毕达哥拉斯四重奏:
a^2 + b^2 + c^2 = d^2 when a, b, c <= 1000
,
我的代码会生成所有这些 ( 85490
) 但大约需要10 分钟。
我正在尝试减少执行时间。如何提高执行时间?请有任何建议。
这是我的代码。
static int isSquare(int n)
{
int m = (int) Math.sqrt(n);
return m * m == n ? m : 0;
}
static List<List<Integer>> allQuadraples = new ArrayList<>();
static int findQuadraples(int range)
{
int total = 0;
for (int a = 1; a <= range; a++)
for (int b = 1; b <= range; b++)
for (int c = 1; c <= range; c++)
{
int sum = a * a + b * b + c * c;
int d = isSquare(sum);
if (d != 0) // a possible Quadruple
{
List<Integer> oneQuadraple = new ArrayList<>(Arrays.asList(a, b, c, d));
Collections.sort(oneQuadraple); // sorting before insertion for comparing later
if (!allQuadraples.contains(oneQuadraple))
{
System.out.println(oneQuadraple);
allQuadraples.add(oneQuadraple);
total++;
}
}
}
return total;
}