Skip to content

Commit 35d7880

Browse files
committed
algo(2025-10-28): 10 001st Prime
notes: Primes go wild! Ref.: https://projecteuler.net/problem=7 language: Java
1 parent 5cfd805 commit 35d7880

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.josimarsilva.projecteuler.java;
2+
3+
/**
4+
* By listing the first six prime numbers: 2,3,5,7, 11, and 13, we can see that the 6th prime is 13.
5+
*
6+
* What is the 10001st prime number?
7+
*
8+
* Ref.: <a href="https://projecteuler.net/problem=7">Reference</a>
9+
*
10+
*/
11+
record TenThousandFirstPrime(long position) {
12+
13+
static TenThousandFirstPrime at(long position) {
14+
return new TenThousandFirstPrime(position);
15+
}
16+
17+
private boolean isPrime(long number) {
18+
if (number == 0 || number == 1) return false;
19+
if (number == 2) return true;
20+
if (number % 2 == 0) return false;
21+
22+
final var squareOfN = (long) Math.sqrt((double) number);
23+
for (long x = 3L; x <= squareOfN; x += 2) {
24+
if (number % x == 0) return false;
25+
}
26+
return true;
27+
}
28+
29+
//Time: O(N ^ 3/2 (log N) ^ 3/2) / Space: O(1)
30+
long calculate() {
31+
var primeCount = 0L;
32+
var lastKnownPrime = 0L;
33+
var number = 2L;
34+
35+
while (primeCount != position) {
36+
if (isPrime(number)) {
37+
lastKnownPrime = number;
38+
primeCount++;
39+
}
40+
number++;
41+
}
42+
43+
return lastKnownPrime;
44+
}
45+
46+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.josimarsilva.projecteuler.java;
2+
3+
import org.junit.jupiter.api.TestInstance;
4+
import org.junit.jupiter.params.ParameterizedTest;
5+
import org.junit.jupiter.params.provider.Arguments;
6+
import org.junit.jupiter.params.provider.MethodSource;
7+
8+
import java.util.stream.Stream;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
12+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
13+
public class TenThousandFirstPrimeTest {
14+
15+
@ParameterizedTest
16+
@MethodSource("samples")
17+
public void shouldReturnThePrimeNumberAtGivenPosition(long position, long expectedPrime) {
18+
assertThat(TenThousandFirstPrime.at(position).calculate()).isEqualTo(expectedPrime);
19+
}
20+
21+
private Stream<Arguments> samples() {
22+
return Stream.of(
23+
Arguments.of(6L, 13L),
24+
Arguments.of(10L, 29L),
25+
Arguments.of(10_001L, 104743L)
26+
);
27+
}
28+
29+
}

0 commit comments

Comments
 (0)