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