Count Primes
2016-05-29 16:48
197 查看
题目描述:
Description:
Count the number of prime numbers less than a non-negative number, n.
找到比n小的所有质数的个数
这里用wiki上的图来说,就很显然了。
比如n=52,那么就先让2的倍数全纪录下来,然后3的倍数,直到7的倍数,然后其他没有记录下来的就是质数了,加起来就行。
我知道这个方法后一开始用的hashset做,但是超时,后来换成数组,AC了。
原hashSet做法:
public int countPrimes(int n) {
int result=0;
Set<Integer> set=new HashSet<Integer>();
for(int i=2;i<Math.sqrt(n);i++){
for(int j=2;i*j<n;j++){
set.add(i*j);
}
}
for(int i=2;i<n;i++){
if(!set.contains(i)){
result++;
}
}
return result;
}AC代码:
public int countPrimes(int n) {
int result=0;
boolean[] maps=new boolean[n-1];
for(int i=2;i<Math.sqrt(n);i++){
for(int j=2;i*j<n;j++){
maps[i*j-1]=true;
}
}
for(int i=1;i<n-1;i++){
if(!maps[i]){
result++;
}
}
return result;
}
Description:
Count the number of prime numbers less than a non-negative number, n.
找到比n小的所有质数的个数
这里用wiki上的图来说,就很显然了。
比如n=52,那么就先让2的倍数全纪录下来,然后3的倍数,直到7的倍数,然后其他没有记录下来的就是质数了,加起来就行。
我知道这个方法后一开始用的hashset做,但是超时,后来换成数组,AC了。
原hashSet做法:
public int countPrimes(int n) {
int result=0;
Set<Integer> set=new HashSet<Integer>();
for(int i=2;i<Math.sqrt(n);i++){
for(int j=2;i*j<n;j++){
set.add(i*j);
}
}
for(int i=2;i<n;i++){
if(!set.contains(i)){
result++;
}
}
return result;
}AC代码:
public int countPrimes(int n) {
int result=0;
boolean[] maps=new boolean[n-1];
for(int i=2;i<Math.sqrt(n);i++){
for(int j=2;i*j<n;j++){
maps[i*j-1]=true;
}
}
for(int i=1;i<n-1;i++){
if(!maps[i]){
result++;
}
}
return result;
}
相关文章推荐
- Spark Streaming源码解读之数据清理内幕彻底解密
- mv命令移动文件夹下文件,文件夹包含&符号
- 浏览器兼容的css hack
- Android 平移动画+缩放动画=集合动画->实现开机启动页+通过线程休眠事件跳转到主界面
- C++的链接错误LNK2005总结
- 原始数据中插入数据(30)
- http通信类的封装
- 1052. 卖个萌 (20)
- jquery绑定事件
- mybatis多个参数传值
- Leetcode no. 32
- 学习进度13
- iOS开发测试不同的网络环境2G/3G/4G/WiFi
- 0529
- 记录一些插件等信息(不断更新!)
- CodeForces 591B
- eclipse有生成不带参数的构造方法的快捷键吗
- 大于零的数字以内的各个数字累加求和,奇数偶数个数,及平均值求解
- 反射-构造器
- MySQL启动本地连接服务