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><Easy> 204 Count Primes --找素数/质数 (?)

Description: Count the number of prime numbers less than a non-negative number, n. Credits: Specia...
  • awsxsa
  • awsxsa
  • 2015年10月15日 21:18
  • 792

204. Count Primes [easy] (Python)

题目链接https://leetcode.com/problems/count-primes/题目原文 Count the number of prime numbers less than a ...

【leetcode】【204】Count Primes

一、问题描述 Description: Count the number of prime numbers less than a non-negative number, n. ...

leetcode 204. Count Primes-素数统计

原题链接:204. Count Primes 按照题目“Show Hint”提示,如果定义一个函数,判断这个数是否是素数,那么效率会很低: public int countPrimes(int...

leetcode 204: Count Primes

问题描述:Description:Count the number of prime numbers less than a non-negative number, n.

LeetCode 204 - Count Primes

一、问题描述Description:Description:Count the number of prime numbers less than a non-negative number, nHi...

LeetCode 204:Count Primes

Description: Count the number of prime numbers less than a non-negative number, n 分析: 题目要求计算小于N的所有...

【LEETCODE】204-Count Primes

Description: Count the number of prime numbers less than a non-negative number, n. 思路: The...

LeetCode笔记:204. Count Primes

寻找小于n的质数个数

Leetcode 204题 Count Primes

题目 :Count PrimesCount the number of prime numbers less than a non-negative number, n.题目分析: 这道题目的意思是写...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Easy-题目59:204. Count Primes
举报原因:
原因补充:

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