Полагаю, вы имеете в виду 16 цифр, а не 16 бит.16 бит действительно легко, и вы можете просто проверить это с помощью простого цикла и деления.Ваш checkPrime()
может быть оптимизирован следующим образом:
public static boolean checkPrime(long n)
{
if (n == 2)
return true;
if (n % 2 == 0)
return false;
for (long i = 3; i <= Math.sqrt(n); i += 2)
{
if (n % i == 0)
return false;
}
return true;
}
Но если число становится слишком большим (я думаю, что даже для 16 цифр это не понадобится), вы можете использовать примитивность Миллера-Робинатест .Этот тест можно использовать для проверки, является ли число ОЧЕНЬ БОЛЬШОЙ простым или нет.
Если вам нужно сгенерировать все простые числа до определенного числа , вы можетеиспользуйте Сито Эратосфена .
Просто помните, что диапазон int
составляет от -2,147,483,648
до 2,147,483,647
, поэтому он не может содержать 16-значное число.Вы можете использовать long
, поскольку его диапазон составляет от -9,223,372,036,854,775,808
до 9,223,372,036,854,775,807
, поэтому он может содержать 16-значный номер.