# Project Euler

### A Taste of Number Theory

#### Problem 44: Penatagon Numbers

Pentagonal numbers are generated by the formula, Pn = n(3n - 1)/2. The first ten pentagonal numbers are: 1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...

It can be seen that P4 + P7 = 22 + 70 = 92 = P8. However, their difference, 70 - 22 = 48, is not pentagonal.

Find the pair of pentagonal numbers, Pj and Pk, for which their sum and difference are pentagonal and D = |Pk - Pj | is minimized; what is the value of D?

#### The Catch

How to check if a number is pentagonal.
How to make sure that D is minimized.

#### The Light

As in the discussion in Problem 42, solve the inverse function to check if an integer is pentagonal.
P(n) = t = n(3n - 1)/2
2t = 3n2 - n
0 = 3n2 - n - 2t
n = (1 + sprt(1 + 24t))/6 and
n = (1 - sqrt(1 + 24t) )/6 (discarded)

To make sure that the difference is minimized, for each pentagonal number p found, find the sum and difference of p with each and every pentagonal number a, with a < p. Stop at the first instance where both the sum and difference are pentagonal(i.e the difference D is minimized). This is because after this instance, the difference D will get larger as p and a get larger.

#### The Code

```public class Problem44
{
public static void main(String[] args)
{
boolean found = false;
long j = 1;

while(!found)
{
long Pj = j * (3*j - 1)/2;

for(long k = j - 1; k > 0; k--)
{
long Pk = k * (3*k - 1)/2;
if(isPent(Pj - Pk) && isPent(Pj + Pk))
{
found = true;
System.out.println(Pj - Pk);
break;
}
}
j++;
}
}

public static boolean isPent( long t )
{
double tmp = (1.0 + Math.sqrt(1 + 24 * t)) / 6.0;
return tmp == (long)tmp;
}
}
```