1. 程式人生 > >leetcode(9)計數質數的js實現

leetcode(9)計數質數的js實現

一.題目描述:

統計所有小於非負整數 n 的質數的數量。

示例:
輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

二.js程式碼實現:

1.實現思路:

(1)如果直接判斷從2到該數的方法,執行時間會超時,可以用埃拉託斯特尼篩法對質數進行篩選

(2)埃拉託斯特尼篩法,要得到自然數n以內的全部素數,必須把不大於根號n的所有素數的倍數剔除,剩下的就是素數

(3)要得到自然數n以內的全部素數,必須把不大於 的所有素數的倍數剔除,剩下的就是素數。
給出要篩數值的範圍n,找出以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;再用下一個質數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下一個質數5篩,把5留下,把5的倍數剔除掉;不斷重複下去

2.js程式碼實現:

/**
 * @param {number} n
 * @return {number}
 */
var countPrimes = function(n) {
    if(n < 2)
        return 0;
    let count = 0;
    for(let i = 2; i < n; i++)
    {
        if (i <= 3 && i > 1)
        { 
            count++; continue; 
        }
        if (i % 2 == 0 || i % 3 == 0)
        { 
            continue; 
        }
        let value = 0;
        for (let j = 5; j * j <= i; j += 6)
        {
            if (i % j == 0 || i % (j + 2) == 0) 
                { 
                    value = 2; 
                    break; 
                }
        }
        if(!value) 
            count++;
    }
    return count;
};