Easy-题目59:204. Count Primes

原创 2016年05月30日 22:35:43

题目原文:
Count the number of prime numbers less than a non-negative number, n.
题目大意:
问<n的素数有多少个?
题目分析:
使用埃拉托色尼筛法。
该算法描述如下:(Translate from wikipaedia.)
列出从2到n的序列;
初始化p为序列第一个数(目前为2,这是废话,2当然是素数了);
划掉所有p的倍数;
如果序列第一个数的平方>=n,则剩下的数都是素数,否则goto 2.
源码:(language:java)

public class Solution {
    public int countPrimes(int n) {
        if( n <=2) 
            return 0;
        int count = 1;
        boolean isNotPrime[] = new boolean[n+1];
        for(int i=3;i*i<=n;i=i+2) {
            if(!isNotPrime[i]) {
                for(int j= i*i ;j<=n;j=j+2*i) 
                    isNotPrime[j] = true;
            }
        }
        for(int i = 3;i<n;i=i+2) {
            if(!isNotPrime[i]) 
                count++;
        }
        return count;
    }
}

成绩:
11ms,beats 99.20%,众数28ms,6.70%
cmershen的碎碎念:

可能大多数提交的代码都用的是朴素解法,所以埃拉托色尼筛法可以击败这么大比例的提交代码……(暴力从2-n尝试,时间复杂度为O(n3/2)

附朴素解法(现在提交这个好像会超时):

public int countPrimes(int n) {
   int count = 0;
   for (int i = 1; i < n; i++) {
      if (isPrime(i)) count++;
   }
   return count;
}

private boolean isPrime(int num) {
   if (num <= 1) return false;
   // Loop's ending condition is i * i <= num instead of i <= sqrt(num)
   // to avoid repeatedly calling an expensive function sqrt().
   for (int i = 2; i * i <= num; i++) {
      if (num % i == 0) return false;
   }
   return true;
}

by the way….hihocoder中似乎介绍了一个更快的算法,见http://hihocoder.com/contest/hiho93/problem/1

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

LeetCode 204:Count Primes

Description: Count the number of prime numbers less than a non-negative number, n 分析: 题目要求计算小于N的所有...
  • sunao2002002
  • sunao2002002
  • 2015年05月08日 18:40
  • 2510

LeetCode 204 Count Primes(质数计数)(*)

翻译计算小于一个非负整数n的质数的个数。原文Count the number of prime numbers less than a non-negative number, n.分析这道题以前遇到...
  • NoMasp
  • NoMasp
  • 2016年02月01日 11:25
  • 3478

LeetCode 204 - Count Primes

一、问题描述Description:Description:Count the number of prime numbers less than a non-negative number, nHi...
  • lisong694767315
  • lisong694767315
  • 2015年04月27日 15:33
  • 8602

【LeetCode-面试算法经典-Java实现】【204-Count Primes(统计质数)】

【204-Count Primes(统计质数)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-Chao】原题  ...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月27日 06:30
  • 2863

Python 刷题日记:LeetCode 204: Count Primes

原题: Description:Count the number of prime numbers less than a non-negative number, n.解题思路:常规解法:因为要求...
  • github_39261590
  • github_39261590
  • 2017年06月28日 21:13
  • 306

LeetCode 204. Count Primes(C++版)

Description: Count the number of prime numbers less than a non-negative number, n. 思路分析: 方法一:我们知道大于...
  • Mary19920410
  • Mary19920410
  • 2017年03月30日 17:04
  • 220

[leetcode] 204. Count Primes

Description: Count the number of prime numbers less than a non-negative number, n. 解法一: 大神的...
  • denny851108
  • denny851108
  • 2016年07月29日 11:59
  • 79

Leetcode——204. Count Primes

题目Description:Count the number of prime numbers less than a non-negative number, n.Credits: Special...
  • starstar1992
  • starstar1992
  • 2017年01月13日 11:26
  • 162

204. Count Primes (java)

204. Count Primes DescriptionSubmissionsSolutions Total Accepted: 106085Total Submi...
  • CriminalCode
  • CriminalCode
  • 2017年04月02日 21:16
  • 144

204. Count Primes(unsolved)

Description:Count the number of prime numbers less than a non-negative number, n.其他人写法: 主要思路就是质数得从奇...
  • gdmmzmj
  • gdmmzmj
  • 2016年11月12日 16:42
  • 65
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Easy-题目59:204. Count Primes
举报原因:
原因补充:

(最多只允许输入30个字)