js算法之求1-10000内的所有素数

首先写一个方法判断这个数是否是素数:

判断一个数是否素数(从2开始,只有它自己和1是它的乘法因子)

一般的方法

function isPrime(n) {
    if(n <=1) {return false}
    // Math.floor下限
    const N = Math.floor(Math.sqrt(n))
    let is_prime = true
    for(let i =2;i<=N;i++) {
        if(n%i===0) {
            is_prime = false
            break
        }
    }
    return is_prime
}

然后再求1-10000内的所有素数

let arr = []
for(let i = 0 ; i < 100000; i++) {
    if(isPrime(i)) {
      arr.push(i)
    }
}

把所有的素数放在arr中

用迭代器的思想

这种方法的性能会好一点

function* sieve_primes(n) {
    let numbers = Array.from({length:n-2},(_,i)=>i+2) // 拿到一个2-10000的数组
    let p = null
    while(p=numbers.shift()) {
        yield p
        numbers = numbers.filter(t=>t%p !==0)
    }
    return numbers 
}
// 那迭代器值的方法
const it = sieve_primes(10000)
console.log([...it])

猜你喜欢

转载自www.cnblogs.com/fanzhanxiang/p/10304776.html