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这里基础数因子组成的数字减少复杂度,最后还是不行,
最后还是看网上思路才做出来的
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这里基础数因子组成的数字减少复杂度,最后还是不行,
最后还是看网上思路才做出来的
相关文章推荐
- 【LeetCode】 204. Count Primes
- leetcode(52).204. Count Primes
- Leetcode 204. Count Primes
- [LeetCode]204. Count Primes
- leetcode 204. Count Primes 这道题很有趣 + 搜索空间递减
- LeetCode 204. Count Primes
- leetcode 204. Count Primes
- [leetcode] 204. Count Primes
- LeetCode 204. Count Primes
- Leetcode-204. Count Primes
- LeetCode 204. Count Primes
- LeetCode 204. Count Primes
- LeetCode-204. Count Primes
- 【LeetCode】204. Count Primes
- leetcode 204. Count Primes
- leetcode-204. Count Primes
- [leetcode]204. Count Primes
- LeetCode - 204. Count Primes
- leetcode No204. Count Primes
- LeetCode 204. Count Primes