If I want to find all the Pythagorean Triplets in a specific range, I wrote the following code:
for (int a = 1; a < range; a++) { for (int b = 1; b < range; b++) { for (int c = 1; c < range; c++) { if (a * a + b * b == c * c) { System.out.println(a + "," + b + "," + c); } } } }
But unfortunately I got duplicated triplets, for example: 3, 4, 5 and 4, 3, 5
How can I overcome this?
Advertisement
Answer
You can remove duplicates by changing your loops, particularly where each one starts:
for (int a = 1; a < range; a++) { for (int b = a + 1; b < range; b++) { for (int c = b + 1; c < range; c++) { if (a * a + b * b == c * c) { System.out.println(a + "," + b + "," + c); } } } }
Notice that the inner loop is unnecessary since you can calculate c
directly from a
and b
. You just have to check if the calculated value is an integer:
for (int a = 1; a < range; a++) { for (int b = a + 1; b < range; b++) { double c = Math.sqrt(a*a + b*b) if (c == int(c)) { System.out.println(a + "," + b + "," + c); } } }