Как избежать числового исключения: переполнение в Maple 14? - PullRequest
1 голос
/ 26 сентября 2011

Maple 14 имеет команду isprime, которая проверяет, является ли число простым или нет.Разрешается записывать выражения в качестве входных данных, поэтому мы можем написать следующую команду:

isprime (2 ^ (3 ^ 43-5) -1);

, ноПри попытке запустить тест я получаю следующую ошибку:

Ошибка, числовое исключение: переполнение

Итак, мой вопрос: как избежать этой ошибки переполнения?Должен ли я изменить размер стека по умолчанию, и если это так, как это сделать на win 7 ultimate?

1 Ответ

1 голос
/ 29 сентября 2011

Так как 3 ^ 43-5 является составным, то и 2 ^ (3 ^ 43-5) -1. Смотрите страницу Википедии о простых числах Мерсенна. И вы можете быстро получить этот результат в Maple. Так что, если это все, что вы хотели, то все готово.

> isprime( 3^43-5 );
                         false

Теперь предположим, что у вас было простое число p, сравнимое с размером 3 ^ 43. Допустим, следующий простой штрих выше этого.

nextprime( 3^43-5 );
                 328256967394537077679

numtheory[mersenne]( nextprime( 3^43-5 ) );
                          FAIL

Хорошо, это слишком прискорбно.

Попробуйте применить isprime к 2 ^ (10 ^ 6 + 3) -1. (Из-за нормальных правил оценки кленовых процедур isprime получает расширенный аргумент, поэтому у него нет шансов увидеть специальную форму и выполнить более дешевый тест только с 10 ^ 6 + 3. Вот для чего numtheory[mersenne].) Вы подожду некоторое время. А теперь представьте, сколько времени потребуется isprime для обработки числа, примерно в 10 ^ 11 раз большего, что примерно равно количеству, которое вы получили бы, если бы использовали 2^nextprime(3^43-5)-1.

...