leetcode204计数质数

leetcode 204 Count Primes

Posted by BY on July 15, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的204题。

问题描述

统计所有小于非负整数 n 的质数的数量。

示例 1:

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

分析:

func countPrimes(n int) int {
    if n <= 2 {
        return 0
    }
    prime := make([]int, 1, 100)
    prime[0] = 2
    count := 1
    isPrime := func(n int) bool {
        index := 0
        for i := prime[index]; i * i <= n;  {
            if n % i == 0 {
                return false
            }
            if index >= len(prime)-1 {
                i++
            } else {
                index++
                i = prime[index]
            }
        }
        return true
    }
    for i := 3; i < n; i++ {
        if isPrime(i) {
            count++
            prime = append(prime, i)
        }

    }
    return count
}

Sieve of Eratosthenes算法

int countPrimes(int n) {
    boolean[] isPrim = new boolean[n];
    Arrays.fill(isPrim, true);
    for (int i = 2; i * i < n; i++) 
        if (isPrim[i]) 
            for (int j = i * i; j < n; j += i) 
                isPrim[j] = false;
    
    int count = 0;
    for (int i = 2; i < n; i++)
        if (isPrim[i]) count++;
    
    return count;
}

记录一下:c++中vector是按位进行存储,优选bitset来存储

总结:

勤思考。

结语

不管怎么样好好加油。