Count Primes [LeetCode 解题报告]
Posted Michael-zhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Count Primes [LeetCode 解题报告]相关的知识,希望对你有一定的参考价值。
题目描述:
给定n,返回小于n的素数的个数。
解题思路:
1)地毯式搜索(TLE)
即:统一从2到根号n的所有数中素数的个数,太暴力了,没过测试!
2)上下素性判别法(貌似是这个名字,TLE)
大于3的所有素数都可以表示成6*k+1或者6*k-1的形式,从而只从满足这个条件的数中进行地毯式筛选,无奈还是TLE。。。。
3)迭代向后筛选法(名字自创的,哈哈!!重点是理解思路就行)
首先分析小于n的所有数中,所有偶数肯定不是素数,所以从所有奇数中筛选;在所有奇数中,每个小奇数的奇数倍肯定也不是素数,循环至n的开平方;然后统计所有奇数中没有被标定为和数的个数,即可得到最终的count,代码如下:
int countPrimes(int n)
if(n<=2)return 0;
bool isNotPrime[n+1]=;
for(int i=3;i<=sqrt(n);i+=2)
if(isNotPrime[i])continue;
for(int j=i*i;j<n;j+=2*i)
isNotPrime[j]=true;
int res=1;
for(int i=3;i<n;i+=2)
if(!isNotPrime[i])res++;
return res;
以上是关于Count Primes [LeetCode 解题报告]的主要内容,如果未能解决你的问题,请参考以下文章
Java [Leetcode 204]Count Primes