您的位置:首页 > 其它

leetcode - 204. Count Primes

2018-02-04 20:37 357 查看
Problem:

Count the number of prime numbers less than a non-negative number, n.

解释:计算小于n的所有质数。(质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。)

Solve:

逐一判断的方法会超时。这里用的是埃拉托斯特尼筛法。2是质数,那么
4,6,8,10...等都不是质数。3是质数 那么6,9,12...都不是质数,

这样能减少查找复杂度。定义一个长度为n的数组保存这些数字信息,标记其是否是质数。(时间复杂度O(nlgn(lgn)),AC-33ms)public int countPrimes(int n) {
if(n<=1){
return 0;
}
int[] mark=new int
;//质数标记
int count=0;
for (int i = 2; i <=Math.sqrt(n) ; i++) {
if(mark[i]!=1){
for (int j = i*2; j <n ; j+=i) {
mark[j]=1;
}
}
}
for(int i=2;i<mark.length;i++){//求所有质数,从2开始计算
if(mark[i]!=1){
count++;
}
}
return count;
}后记:普通循环查找复杂度太高,大数超时。有想过排除2,3,5这里基础数因子组成的数字减少复杂度,最后还是不行,
最后还是看网上思路才做出来的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: