【LittleXi】Counting prime numbers
topic description
Given an integer N, returns the number of all prime numbers less than a nonnegative integer N.
204. Count prime numbers
P3912 Number of prime numbers
problem solving ideas
Sieve of Eratosthenes
When calculating each number, mark the multiples of the prime number
# 8112ms
class Solution:
def countPrimes(self, n: int) -> int:
cnt=0
f=[1]*n
for i in range(2,n):
if f[i]:
cnt+=1
j=1
while i*j<n:
f[i*j]=0
j+=1
return cnt
Euler sieve
Optimized version, when marking prime numbers, those that have been marked repeatedly will not be marked
#python版本超时
class Solution:
def countPrimes(self, n: int) -> int:
prime=[0]*(n+1)
vis=[1]*n
for i in range(2,n):
if vis[i]:
vis[i]=0
prime[0]+=1
prime[prime[0]]=i
for j in range(1,prime[0]+1):
if i*prime[j]>n:
break
if i*prime[j]<n:
vis[i*prime[j]]=0
if i%prime[j]==0:
break
return prime[0]
//cpp版本272ms
class Solution {
public:
int countPrimes(int n) {
int vis[5000010] = {
0 };
int prime[5000010] = {
0 };
for (int i = 2; i < n; i++)
{
if (vis[i] == 0)
{
vis[i] = 1;
prime[++prime[0]] = i;
}
for (int j = 1; prime[j] * i <= n &&j <= prime[0]; j++)
{
vis[i * prime[j]] = 1;
if (i % prime[j]==0)
break;
}
}
return prime[0];
}
};