Я так понимаю, что нужно не нахождение простых чисел, а эффективная проверка числа на простоту. Ваше решение представляет собой классическое решение "в лоб", которое, разумеется работает и даёт стопроцентно точный результат. Однако, помимо простого перебора всех чисел от 2 до sqrt(n) есть и более эффективные алгоритмы. На ум быстро приходит два метода оптимизации:
1. Если не нужна прям гарантия простоты, то можно воспользоваться
тестом Рабина-Миллера. Есть ряд чисел, которые не являются простыми, но проходят этот тест. Про них можно почитать и добавить в дополнительное условие.
2. Можно использовать свойство составных чисел, что они не только не делятся на числа из диапазона 2 .. sqrt(n), но так же не делятся ни на одно из простых чисел меньше sqrt(n). Если после отработки функции isPrime сохранять переданное число в массив, если оно оказалось простым, то можно организовывать цикл не по диапазону 2 .. sqrt(n), а по массиву уже известных простых чисел.