Легко сделать простое сито:
for (int i=2; i<=N; i++){
if (sieve[i]==0){
cout << i << " is prime" << endl;
for (int j = i; j<=N; j+=i){
sieve[j]=1;
}
}
cout << i << " has " << sieve[i] << " distinct prime factors\n";
}
Но как насчет того, когда N очень велико, и я не могу хранить этот массив в памяти? Я искал сегментированные ситовые подходы, и они, кажется, привлекают поиск простых чисел до sqrt (N), но я не понимаю, как это работает. Что, если N очень велико (скажем, 10 ^ 18)?