Easy-题目59:204. Count Primes
2016-05-30 22:35
204 查看
题目原文:
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)
成绩:
11ms,beats 99.20%,众数28ms,6.70%
cmershen的碎碎念:
可能大多数提交的代码都用的是朴素解法,所以埃拉托色尼筛法可以击败这么大比例的提交代码……(暴力从2-n尝试,时间复杂度为O(n3/2))
附朴素解法(现在提交这个好像会超时):
by the way….hihocoder中似乎介绍了一个更快的算法,见http://hihocoder.com/contest/hiho93/problem/1
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
相关文章推荐
- toString()方法
- IM通讯协议总结之一PRIM和IMPP协议
- 线程之间的通信
- android activity 传参
- Celery用户指引-------------Tasks
- 卷积神经网络中图像池化操作全解析
- 管道请求处理流程
- Bone Collector
- JQUERY知识总结
- 训练3 习题22
- MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
- 浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views.
- 策略模式(简单入门)
- RHRL7.0安装RAC11.2.0.4----安装操作系统
- 基于zipkin分布式链路追踪系统预研第一篇
- 安卓中引入第三方汉字转拼音架包的写法及注意事项
- hdu_4734_F(x)(数位DP水)
- mysql order by rand() 效率优化方法
- rpm命令详解
- 多核编程 与 单核多线程编程的区别