Znajdowanie listy liczb pierwszych w najkrótszym czasie

Czytam wiele algorytmów, aby znaleźć liczby pierwsze, a wniosek jest taki, że liczba jest liczbą pierwszą, jeśli nie jest podzielna przez żadną z jej poprzednich liczb pierwszych.

Nie jestem w stanie znaleźć bardziej precyzyjnej definicji. Na tej podstawie napisałem kod i działa on zadowalająco do momentu, gdy przekazana maksymalna liczba wynosi 1000000. Ale wierzę, że istnieją znacznie szybsze algorytmy, aby znaleźć wszystkie liczby pierwsze mniejsze od podanej liczby.

Oto mój kod, czy mogę mieć lepszą wersję tego samego?

 public static void main(String[] args) {
    for (int i = 2; i < 100000; i++) {
        if (checkMod(i)) {
            primes.add(i);
        }
    }
}

private static boolean checkMod( int num) {
    for (int i : primes){
        if( num % i == 0){
            return false;
        }
    }
    return true;
}