我的任务是生成一个数组,其中包含最多 12 位数字的所有素数。
我试图通过首先创建一个函数来模拟Eratosthenes 的筛子,enumerate
该函数生成一个包含从 2 到 的每个整数的数组num
:
var enumerate = function(num) {
array = [];
for (var i = 2; i <= num; i++) {
array.push(i);
}
return array;
};
然后我创建了一个函数leaveOnlyPrimes
,它循环并从数组中删除每个数组成员的倍数,最多为 1/2 max
(这最终不会是每个整数,因为每次迭代都会使数组变小):
var leaveOnlyPrimes = function(max,array) {
for (var i = 0; array[i] <= max/2; i++) {
(function(mult,array) {
for (var i = mult*2; i <= array[array.length-1]; i += mult) {
var index = array.indexOf(i);
if (index !== -1) {
array.splice(index,1);
}
}
})(array[i],array);
}
};
这适用于高达约 50000 的数字,但高于此数字,浏览器似乎会冻结。
是否有某种版本的这种方法可以适应更大的数字,或者我是在叫错树吗?