LeetCode204:https://leetcode-cn.com/problems/count-primes/
——这个题目其实很简单,主要看到了有趣的算法,我就记下来。
正常做法:
- 直接判断小于N之前的数字是否质数,是就count++。不过我们要尽量减少判断质数的时间,如果直接暴力从2直到那个数字来判断肯定会超时。因此:
- C++代码:
class Solution {
public:
int countPrimes(int n) {
int count=1;
if(n<3) return 0;
for(int i=3;i<n;i+=2)
{
if(isPrime(i))
count++;
}
return count;
}
bool isPrime(int n)
{
if(n==2)
return true;
if(n%2==0)//可以减少时间消耗
return false;
for(int i=3;i<=sqrt(n);i+=2)//根号N就能判断其是否质数,也是减少时间消耗
{
if(n%i==0)
return false;
}
return true;
}
};
厄拉多塞筛法(这个算法是看力扣里面的解题得知):
- 介绍