难度:简单

    题目描述:
    统计所有小于非负整数 n 的质数的数量。

    示例:

    1. 输入: 10
    2. 输出: 4
    3. 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7

    解题思路:在寻找素数时,采用了一种与众不同的方法:先将 2-N 的各数放入表中,然后在 2 的上面画一个圆圈,然后划去 2 的其他倍数;第一个既未画圈又没有被划去的数是 3,将它画圈,再划去 3 的其他倍数;现在既未画圈又没有被划去的第一个数是 5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于N的各数都画了圈或划去为止。

    这时,表中画了圈的以及未划去的那些数正好就是小于 N 的素数。

    1. var countPrimes = function(n) {
    2. let count = 0;
    3. let signs = new Uint8Array(n);
    4. for (let i = 2; i < n; i++) {
    5. if (!signs[i - 1]) {
    6. count++;
    7. for (let j = i * i; j <= n; j += i) {
    8. signs[j - 1] = true;
    9. }
    10. }
    11. }
    12. return count;
    13. };