def count_primes(n):
if n<2: return 0
sieve=[True]*n; sieve[0]=sieve[1]=False
for i in range(2,int(n**0.5)+1):
if sieve[i]:
for j in range(i*i,n,i): sieve[j]=False
return sum(sieve)
public int countPrimes(int n){
if(n<2) return 0;
boolean[] s=new boolean[n]; Arrays.fill(s,true); s[0]=s[1]=false;
for(int i=2;(long)i*i<n;i++) if(s[i]) for(int j=i*i;j<n;j+=i) s[j]=false;
int c=0; for(boolean b:s) if(b) c++;
return c;
}
Sieve of Eratosthenes. sum(sieve) vs explicit loop. Java needs long cast.
def count_primes(n):
if n<2: return 0
sieve=[True]*n; sieve[0]=sieve[1]=False
for i in range(2,int(n**0.5)+1):
if sieve[i]:
for j in range(i*i,n,i): sieve[j]=False
return sum(sieve)
public int countPrimes(int n){
if(n<2) return 0;
boolean[] s=new boolean[n]; Arrays.fill(s,true); s[0]=s[1]=false;
for(int i=2;(long)i*i<n;i++) if(s[i]) for(int j=i*i;j<n;j+=i) s[j]=false;
int c=0; for(boolean b:s) if(b) c++;
return c;
}
1. Create sieve 2. Mark composites 3. Count primes