我正在用scala查看素数。我使用以下代码检查数字n是否为素数。
(2 until n) forall(d=>n%d!=0)
我检查了scala对素数179426549
返回true的速度。
(2 until 179426549L.toInt) forall(d=>179426549L%d!=0)
res22: Boolean = true
然后我尝试了一个更大的数字32416190071
,看看为这个更大的素数返回真实需要多长时间。
(2 until 32416190071L.toInt) forall(d=>32416190071L%d!=0)
res23: Boolean = true
令我惊讶的是,返回值为true会更快地返回较大的素数。为什么更大的数字更快地返回真实?
答案 0 :(得分:6)
较大的数字,32416190071,overflows可以存储在整数中的最大正值,并且变为负数-1943548297。范围(2 until -1943548297)
为空,因此forall
会立即返回true。