File tree Expand file tree Collapse file tree 3 files changed +97
-0
lines changed
algorithm-exercises-java/src
main/java/ae/hackerrank/projecteuler
java/ae/hackerrank/projecteuler
resources/hackerrank/projecteuler Expand file tree Collapse file tree 3 files changed +97
-0
lines changed Original file line number Diff line number Diff line change
1
+ package ae .hackerrank .projecteuler ;
2
+
3
+ /**
4
+ * Even Fibonacci numbers.
5
+ *
6
+ * @link Problem definition [[docs/hackerrank/projecteuler/euler003.md]]
7
+ */
8
+ public class Euler003 {
9
+
10
+ private Euler003 () {}
11
+
12
+ private static Long primeFactor (Long n ) {
13
+ if (n < 2 ) {
14
+ return null ;
15
+ }
16
+
17
+ Long divisor = n ;
18
+ Long maxPrimeFactor = null ;
19
+
20
+ int i = 2 ;
21
+ while (i <= Math .sqrt (divisor )) {
22
+ if (divisor % i == 0 ) {
23
+ divisor = divisor / i ;
24
+ maxPrimeFactor = divisor ;
25
+ } else {
26
+ i += 1 ;
27
+ }
28
+ }
29
+
30
+ if (maxPrimeFactor == null ) {
31
+ return n ;
32
+ }
33
+
34
+ return maxPrimeFactor ;
35
+ }
36
+
37
+ /**
38
+ * Even Fibonacci numbers.
39
+ */
40
+ public static Long euler003 (long n ) {
41
+ return primeFactor (n );
42
+ }
43
+ }
44
+
45
+ //CHECKSTYLE.ON: JavadocParagraph
Original file line number Diff line number Diff line change
1
+ package ae .hackerrank .projecteuler ;
2
+
3
+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4
+
5
+ import java .io .IOException ;
6
+ import java .util .List ;
7
+ import org .junit .jupiter .api .BeforeAll ;
8
+ import org .junit .jupiter .api .Test ;
9
+ import org .junit .jupiter .api .TestInstance ;
10
+ import org .junit .jupiter .api .TestInstance .Lifecycle ;
11
+ import util .JsonLoader ;
12
+
13
+
14
+ @ TestInstance (Lifecycle .PER_CLASS )
15
+ class Euler003Test {
16
+
17
+ public static class Euler003TestCase {
18
+ public Long n ;
19
+ public Long expected ;
20
+ }
21
+
22
+ private List <Euler003TestCase > testCases ;
23
+
24
+ @ BeforeAll
25
+ public void setup () throws IOException {
26
+ String path = String .join ("/" ,
27
+ "hackerrank" ,
28
+ "projecteuler" ,
29
+ "euler003.testcases.json" );
30
+
31
+ this .testCases = JsonLoader .loadJson (path , Euler003TestCase .class );
32
+ }
33
+
34
+ @ Test void euler003 () {
35
+
36
+ for (Euler003TestCase test : testCases ) {
37
+ Long solutionFound = Euler003 .euler003 (test .n );
38
+
39
+ assertEquals (test .expected , solutionFound ,
40
+ "%s(%d) => must be: %s" .formatted (
41
+ "Euler003.euler003" ,
42
+ test .n ,
43
+ test .expected
44
+ )
45
+ );
46
+ }
47
+ }
48
+ }
Original file line number Diff line number Diff line change
1
+ [
2
+ { "n" : 10 , "expected" : 5 },
3
+ { "n" : 17 , "expected" : 17 }
4
+ ]
You can’t perform that action at this time.
0 commit comments