您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: