-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathProblem_041.java
More file actions
49 lines (40 loc) · 1.24 KB
/
Problem_041.java
File metadata and controls
49 lines (40 loc) · 1.24 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
package euler;
import java.util.ArrayList;
import java.util.Collections;
public class Problem_041 {
static int largestPandigitalPrime() {
for(int i = 9; i > 2; i--) {
ArrayList<String> perms = getLexographicPermutations(i);
for(int j = perms.size() - 1; j >= 0; j--) {
int pandigital = Integer.parseInt(perms.get(j));
if(pandigital % 5 == 0) continue;
if(isPrime(pandigital)) {
return pandigital;
}
}
}
return 0;
}
private static ArrayList<String> getLexographicPermutations(int n) { // reused solution to euler p_024 w/ a few changes
ArrayList<String> perms = new ArrayList<String>();
perms.add("1");
for(int i = 2; i <= n; i++) {
ArrayList<String> next = new ArrayList<String>(perms);
perms.clear();
for(int j = 0; j < i; j++) {
for(int k = 0; k < next.size(); k++) {
perms.add(new StringBuilder(next.get(k)).insert(j, i).toString());
}
}
}
Collections.sort(perms);
return perms;
}
private static boolean isPrime(long num) {
if (num < 2) return false;
if (num == 2) return true;
if (num % 2 == 0) return false;
for (long i = 3; i * i <= num; i += 2) if (num % i == 0) return false;
return true;
}
}