js实现Eratosthenes算法求素数

128 阅读1分钟

Eratosthenes算法

Eratosthenes算法是亚历山大图书馆馆长通过羊皮纸画格子扎孔排除的方法求的一定范围内的素数,该算法也用了这位先生来命名。
算法是将0到指定范围的数一次填在羊皮纸格子中,首先0,1是确定的素数,从2开始2没被捅破不管,2的倍数的数4,6,8...将这些各自挨个捅破,直到小于n最大的2的倍数,然后又看3没被捅破也不管,捅3的倍数,以此类推,最后没被捅破的都是素数。

实现思路

定义两个数组,一个存素数,一个存非素数;
写i2开始到n结束一个循环,判断非素数中是否有i;
若没有就将i存入素数的数组,并在内部开始从2*i开始循环,将2的倍数的素数一次存入非素数数组,直到不大于n;
最后两层循环结束,返回两个数组。

代码

function Eratosthenes(n) {
    let primeNums = [0,1]
    let nonPrime = []
    for (let i = 2;i<n;i++){
        if(nonPrime.indexOf(i) == -1){
            primeNums.push(i)
            for (let j = 2*i;j<n;j+=i){
                nonPrime.push(j)
            }
        }
    }
    return {primeNums,nonPrime}
}
console.log(Eratosthenes(20))