Skip to content

Commit c05b359

Browse files
authored
Merge pull request #230 from sir-gon/feature/euler003
[Hacker Rank]: Project Euler #3: Largest prime factor. Solved ✓
2 parents cf7cb4b + 0eb7d1f commit c05b359

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[
2+
{ "n": 10, "expected": 5 },
3+
{ "n": 17, "expected": 17 }
4+
]

0 commit comments

Comments
 (0)