Maple 14 有 isprime 命令,用于测试数字是否为素数。允许将表达式编写为输入数据,因此我们可以编写下一个命令:
素数(2^(3^43-5)-1);
但是在尝试运行测试时出现以下错误:
错误,数值异常:溢出
所以我的问题是如何避免这个溢出错误?我应该更改默认堆栈大小吗?如果是这样,如何在 win 7 Ultimate 上执行此操作?
由于 3^43-5 是复合的,所以 2^(3^43-5)-1 也是复合的。请参阅有关梅森素数的维基百科页面。你可以在 Maple 中快速得到这个结果。所以如果这就是你想要的,那么你就完成了。
> isprime( 3^43-5 );
false
现在,假设您有一个与 3^43 大小相当的素数 p。比方说,比这更高的下一个素数。
nextprime( 3^43-5 );
328256967394537077679
numtheory[mersenne]( nextprime( 3^43-5 ) );
FAIL
好吧,那太不幸了。
尝试应用isprime
到 2^(10^6+3)-1。(由于 maple 程序的正常评估规则,isprime
得到扩展的参数,所以没有机会看到特殊的形式,只针对 10^6+3 进行更便宜的测试。这就是它的numtheory[mersenne]
目的。)你会等一会儿。现在想象一下isprime
处理大约 10^11 倍大的数字需要多长时间,这与使用2^nextprime(3^43-5)-1
.