Ваш алгоритм будет хорошо работать для достаточно малых чисел. Для больших чисел следует использовать передовые алгоритмы (например, на эллиптических кривых). Другая идея будет заключаться в использовании некоторых тестов «псевдопробы». Они будут быстро проверять, что число является простым, но они не на 100% точны. Тем не менее, они могут помочь вам исключить некоторые цифры быстрее, чем с вашим алгоритмом.
Наконец, хотя компилятор, вероятно, оптимизирует это для вас, вы должны написать:
int max = (int) (Math.sqrt(n) + 1);
for (int i = 3; i <= max; i = i + 2) {
}