您的位置:首页 > 其它

算法性能比较(一)——找出小于等于n的所有素数

2018-02-06 21:51 453 查看
算法性能比较系列文章主要用于记录笔者刷题时自己写的算法与最佳算法之间的性能比较。

计算素数一般会用下面这样的算法:

function isPrimeNum(num) {
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num%i === 0){
return false;
}
}
return true;
}

function count(max) {
let num = 2;
let primeList = [];
let start = (new Date()).valueOf();
while (num <= max) {
if (isPrimeNum(num)) {
primeList.push(num);
}
num++;
}
let end = (new Date()).valueOf();
console.log("num is " + primeList.length + " used time is " + (end - start));
}

count(10000000);


在笔者的电脑上用时如下(浏览器版本:chrome 64.0.3282.140(正式版本) (64 位)):



然后来瞻仰一下大佬的算法:

function countFast(max) {
var array = new Array(max);
let primeList = [];
let start = (new Date()).valueOf();
for (var j = 2; j < Math.sqrt(max); j++) {
for (var i = j * j; i < max; i += j) {
array[i] = true;
}
}
for (var k = 2; k < max; k++) {
if (!array[k]) primeList.push(k);
}
let end = (new Date()).valueOf();
console.log("num is " + primeList.length + " used time is " + (end - start));
}
countFast(10000000);


在笔者的电脑上用时如下:



第一种算法的时间主要消耗在了isPrimeNum函数里,里面包含了大量的无用计算。

两种思路对应的算法,性能相差了15倍,只能说脑子是个好东西,你值得拥有。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  素数 算法
相关文章推荐