$ ω(n) $ is the number of distinct prime divisor of $n$. Here I am trying to find how many integer in given range $ 1, \ldots, n $ have $ ω(n) = K $. Constraints given on $n$ is $ n \le 10^{12} $.
I can easily compute $ ω(n)$ for $n \le 10^{8}$ in $O (n \log \ n) $ .
Below code can compute distinct prime divisors in $ O(n \log \ n) $.
How to compute when $ n \le 10^{12} $
void genPrimes(){
vector<bool>isPrimes(MAX,1);
for(int i=2;i*i<MAX;i++){
if(isPrimes[i]){
for(int j=i;i*j<MAX;j++) isPrimes[i*j]=0;
}
}
primes.push_back(2);
for(int i=3;i<MAX;i+=2){
if(isPrimes[i])primes.push_back(i);
}
}
void genDistPrimeFactors(){
for(int i=0;primes[i]<1000001;i++){
for(int j=2*primes[i];j<1000001;j+=primes[i]){
divs[j]+=1;
}
}
}