Да, это ваша основная реализация Решета Эратосфена. Есть немало способов, которыми вы можете улучшить его, но давайте сначала рассмотрим основной принцип.
То, что вы делаете, - это создание массива логических значений. Индекс в массиве представляет число, которое мы тестируем, чтобы увидеть, является ли оно простым или нет.
Теперь вы начнете проверять каждое число, чтобы узнать, простое ли оно. Во-первых, определение простого числа: «все числа делятся ТОЛЬКО на себя и 1 без дробного числа».
for ( int i = 2; i < maxLimit; i++ )
Вы начинаете с INDEX 2 (число 3), потому что в зависимости от вашего определения 1 и 2 всегда просты. (Некоторые определения говорят, что 1 не простое число).
if ( sieve[i] == true ) continue;
Если число ранее было помечено как не простое, мы не беспокоимся о текущей итерации.
numberOfPrimes++;
if ( numberOfPrimes == 10001 ) {
number = i;
break;
}
Если ИНДЕКС, в котором мы находимся в настоящее время, не был помечен как простое число, оно должно быть одним, поэтому мы увеличиваем число найденных простых чисел. Следующий фрагмент кода, который я предполагаю, является частью требований программы, которая гласит, что, если найдено 10001 простых чисел, программа должна завершиться. Эта часть может быть опущена, если вы действительно хотите проверить простые числа до максимального числа, определенного вместо определенного числа простых чисел.
for ( int j = i+i; j < maxLimit; j += i )
sieve[j] = true;
Именно здесь начинается настоящая магия сита. Из определения простого числа число не может быть простым, если оно делится на что-либо, кроме себя и 1. Поэтому для любого нового числа, которое мы находим, что это простое число, мы можем пометить все его факторы как НЕ простые. Например, первую итерацию цикла for мы начинаем с 3. Поскольку sieve [2] имеет значение false (ранее не посещали), оно является простым (AND 3 IS PRIME!). Тогда все остальные 3 не могут быть простыми числами. Упомянутый выше цикл for проходит через все сито и помечает все факторы 3 как ложные Так что цикл будет делать: sieve [5] = true; сито [8] = правда ... до конца сита.
Теперь, когда вы достигнете первого числа, большего, чем максимум, определенный изначально, вы можете быть уверены, что любое число, имеющее множитель, было помечено как не простое число. В результате получается логический массив, где каждый индекс, помеченный как ложный, представляет собой простое число.
Вероятно, вы можете получить намного лучшее описание в Википедии, но это суть. Надеюсь, это поможет!