zoukankan      html  css  js  c++  java
  • [LeetCode] Count Primes

    Description:

    Count the number of prime numbers less than a non-negative number, n.

    使用sieve of Eratosthenes方法对质数进行筛选。

    题目要求就是写出这个算法。

    原理是:给出要筛数值的范围n,找出出sqrt{n}以内的素数}p_{{1}},p_{{2}},dots ,p_{{k}}。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个素数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个素数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。

    算法使用了STL中的count函数

    algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。

    代码如下

    class Solution {
    public:
        int countPrimes(int n) {
            vector<bool> prime(n, true);
            prime[0] = false, prime[1] = false;
            for (int i = 2; i < sqrt(n); i++) {
                if (prime[i]) {
                    for (int j = i * i; j < n; j += i) {
                        prime[j] = false;
                    }
                }
            }
            return count(prime.begin(), prime.end(), true);
        }
    };
    // 46 ms

     附上第一次写的TLE算法。

    思路比较简单,判断给定范围内每个数字是否为质数并统计。

    class Solution {
    public:
        int countPrimes(int n) {
            int res = 0;
            if (isPrime(n))
                res = -1;
            for (int i = 0; i <= n; i++) {
                if (isPrime(i))
                    res++;
            }
            return res;
        }
        
        bool isPrime(int n) {
            if (n <= 3)
                return n > 1;
            for (int i = 2; i <= sqrt(n); i++) {
                if (n % i == 0)
                    return false;
            }
            return true;
        }
    };
    // TLE
    TLE
  • 相关阅读:
    sublime配置攻略
    Objective-C代码块语法(block)使用
    [C/C++]_[VS2010来源与UTF8中国字符串转码ANSI问题]
    Android资源管理框架(Asset Manager)简介和学习计划
    ExtJs自学教程(1):从一切API开始
    ORACLE触发特定的解释
    同TextView在不同的显示内容
    :gAudit
    IIS日志分析 MapReduce
    图片存储心得
  • 原文地址:https://www.cnblogs.com/immjc/p/8204582.html
Copyright © 2011-2022 走看看