Мой код для проверки, является ли число простым, ниже. Я прохожу через огромное количество, поэтому я использую BigDecimal.
BigDecimal n = new BigDecimal("29331922499794985782735976045591164936683059380558950386560160105740343201513369939006307531165922708949619162698623675349030430859547825708994708321803705309459438099340427770580064400911431856656901982789948285309956111848686906152664473350940486507451771223435835260168971210087470894448460745593956840586530527915802541450092946574694809584880896601317519794442862977471129319781313161842056501715040555964011899589002863730868679527184420789010551475067862907739054966183120621407246398518098981106431219207697870293412176440482900183550467375190239898455201170831410460483829448603477361305838743852756938687673");
//n is not prime
Я отправляю все «предполагаемые» простые числа в ArrayList, который я буду использовать для вычисления чего-то еще в будущем. Это проходит довольно быстро, но выдает ошибку после почти 100 испытаний. Мне было интересно, если кто-нибудь может помочь мне с исправлением этого кода.
/**
* 6a - 1 = prime number
* a = (prime number + 1)/6
*/
public static void isPrime(BigDecimal n)
{
BigDecimal six = new BigDecimal("6");
BigDecimal que = (n.add(one)).remainder(six); //Highlights this spot and says StackOverFlow - null (in java.math.MutableBigInteger)
if(count == 0)
{
System.out.println("True/False: N is prime. " + que.equals(zero) + ", the remainder is " + que); //By the way, this says that the original number is non-prime.
}
else
{
if(que.equals(zero))
{
System.out.println("The number, " + n + " is prime!");
p.add(n);
}
}
count++;
if(n.compareTo(one)== 1)
isPrime(n.subtract(one));
}