【leetcode】204. 计数质数

 

int countPrimes(int n) {
    unsigned char *map = (unsigned char *)calloc(n, sizeof(unsigned char));
    int sq = (int)sqrt(n);
    for (int i = 2; i <= sq; i++) { // i 不需要遍历到 n,而只需到 sqrt(n) 即可
        if (map[i] == 0) {
            for (int j = i * i; j < n; j += i) { // 把 i 的整数倍都标记排除
                map[j] = 1;
            }                
        }
    }
    int count = 0;
    for (int i = 2; i < n; i++) {
        if (map[i] == 0) {
            count++;
        }
    }
    return count;
}

 

posted @ 2020-11-24 11:47  温暖了寂寞  阅读(63)  评论(0编辑  收藏  举报