**Problem:**

Let (a, b, c) represent the three sides of a right angle triangle with integral length sides. It is possible to place four such triangles together to form a square with length c.

For example, (3, 4, 5) triangles can be placed together to form a 5 by 5 square with a 1 by 1 hole in the middle and it can be seen that the 5 by 5 square can be tiled with twenty-five 1 by 1 squares.

However, if (5, 12, 13) triangles were used then the hole would measure 7 by 7 and these could not be used to tile the 13 by 13 square.

Given that the perimeter of the right triangle is less than one-hundred million, how many Pythagorean triangles would allow such a tiling to take place?

For example, (3, 4, 5) triangles can be placed together to form a 5 by 5 square with a 1 by 1 hole in the middle and it can be seen that the 5 by 5 square can be tiled with twenty-five 1 by 1 squares.

However, if (5, 12, 13) triangles were used then the hole would measure 7 by 7 and these could not be used to tile the 13 by 13 square.

Given that the perimeter of the right triangle is less than one-hundred million, how many Pythagorean triangles would allow such a tiling to take place?

**Solution:**

840

**Code:**

The solution may include methods that will be found here: Library.java .

The solution may include methods that will be found here: Library.java .

public interface EulerSolution{

public String run();

}

/*

* Solution to Project Euler problem 39

* By Nayuki Minase

*

* http://nayuki.eigenstate.org/page/project-euler-solutions

* https://github.com/nayuki/Project-Euler-solutions

*/

public final class p039 implements EulerSolution {

public static void main(String[] args) {

System.out.println(new p039().run());

}

public String run() {

int maxPerimeter = 0;

int maxTriangles = 0;

for (int p = 1; p <= 1000; p++) {

int triangles = countSolutions(p);

if (triangles > maxTriangles) {

maxTriangles = triangles;

maxPerimeter = p;

}

}

return Integer.toString(maxPerimeter);

}

private static int countSolutions(int p) {

int count = 0;

for (int a = 1; a <= p; a++) {

for (int b = a; b <= p; b++) {

int c = p - a - b;

if (b <= c && a * a + b * b == c * c)

count++;

}

}

return count;

}

}

## No comments :

## Post a Comment