Ошибка переполнения стека - передача большого значения - PullRequest
0 голосов
/ 10 октября 2019

Мой код для проверки, является ли число простым, ниже. Я прохожу через огромное количество, поэтому я использую 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));
}

1 Ответ

0 голосов
/ 10 октября 2019

Старайтесь избегать рекурсии. Из-за ограничения в стеке вы получите исключение. Или вы можете увеличить размер стека для JVM:

Переполнение стека из-за глубокой рекурсии в Java?

Для более подробного ответа приведите минимальный воспроизводимый пример.

...