-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem044.java
More file actions
52 lines (42 loc) · 1.39 KB
/
problem044.java
File metadata and controls
52 lines (42 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package project_beuler;
public class problem044 {
// Pentagonal numbers are generated by the formula, P_n=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 minimised;
// what is the value of D?
public static void main(String[] args) {
// p_n - p_k = n*(3*n-1)/2 - k*(3*k-1)/2
// 3/2*n^2 - n/2 - 3/2*k^2 + k/2
// i/2(3*(n^2 - k^2) - n + k)
// 1/2( 3*(n+k)(n-k) - (n+k) )
// TODO Auto-generated method stub
long distance = Integer.MAX_VALUE;
for(int j = 1; pentagonal(j+1) - pentagonal(j) < distance; j++) {
for(int k = j+1; pentagonal(k) - pentagonal(j) < Math.min(distance, 10000000); k++) { //arbitrary large depth
if(
isPentagonal( pentagonal(k) - pentagonal(j) ) &&
isPentagonal( pentagonal(j) + pentagonal(k) )
) {
System.out.println(j+" "+k);
distance = Math.min(distance, pentagonal(k) - pentagonal(j));
}
}
}
System.out.println(distance);
}
public static long pentagonal(long n) {
return n * (3*n-1) /2;
}
public static boolean isPentagonal(long P) {
int i = 1;
while(pentagonal(i) < P) i++;
return pentagonal(i) == P;
}
}