Есть, конечно, сотни тестов примитивности, все из которых имеют различные преимущества и недостатки, основанные на размере числа, специальных формах, размере фактора и т. д.
Однако в java я нахожу наиболее полезным это:
BigInteger.valueOf(long/int num).isProbablePrime(int certainty);
Его уже реализовано и довольно быстро (я нахожу, что для матрицы 1000x1000, заполненной длинными 0-2 ^ 64 и уверенностью 15, требуется ~ 6 секунд) и, вероятно, лучше оптимизирован, чем все, что могли бы предложить смертные.
Он использует версию теста Baillie-PSW primality , которая не знает контрпримеры. (хотя он может использовать немного более слабую версию теста, что иногда может ошибиться).