Это действительно очень просто. Вы предварительно вычисляете все простые числа, которые существуют в вашем диапазоне. Затем для каждого кратного простого числа, кроме первого, вы помечаете число как «не простое».
Выделенная строка просто вычисляет первое появление определенного кратного простого числа в диапазоне от M до N.
Изменить: Дополнительные объяснения.
Этот метод находит простые числа, сначала выполняя поиск всех не простых чисел. Остались простые числа.
Для этого на первом шаге вычисляются все "маленькие" простые числа. Затем для каждого малого штриха он отмечает все его кратные, которые попадают в целевой диапазон. Для этого вам нужно сначала вычислить первое появление этого простого числа в вашем диапазоне - это и есть переменная "start". В основном это первое кратное простому числу, которое> = M. Когда у вас есть "start", вы просто отмечаете все кратные числа, добавляя простое число к текущему числу, пока не достигнете N.
Если вы все еще не знаете, что и как "start" "вычисляется попробуйте подумать о том, как вы могли бы найти" x "так, чтобы это было" x = A * y "и" x> = M ", где вы знаете A и M, но не знаете" y ".
Также я думаю, что в этом алгоритме есть ошибка. Потому что он должен завершить этот цикл для каждого значения в "непростом" наборе. Но, может быть, это не имеет значения, если первое неучтенное простое кратное всегда> N.