Кто-то переформатировал код для ясности из его оригинальной отправленной формы.При этом они изменили одну из трех ошибок в коде.
Первая ошибка заключалась в том, что у второго оператора for после него не было скобок.В результате тело цикла состояло только из оператора, следующего за оператором for.Из прочтения кода становится ясно, что спрашивающий предполагал, что все после второго оператора цикла будет выполняться повторно.Это не то, что происходило.
По сути, идея заключалась в следующем: для каждого числа в диапазоне попробуйте все числа от 1 до кандидата.Подсчитайте количество тех, которые его делят.Посмотрите, есть ли точно 2. Это правильный алгоритм, и ответ, который говорит, что не делить на 2, неправильный.
Однако реализация делала это: для каждого числа в диапазоне делите кандидата на каждоечисло от 1 до кандидата.Затем, после того, как вы сделали все это деление, проверьте, вышел ли последний, и если да, добавьте 1 к счетчику.Итак, происходит то, что вы на самом деле проверяете, действительно ли candidate % candidate == 0
, что он всегда делает.
Вторая ошибка, это то, что счетчик сбрасывается только тогда, когда он достигает 2. Итак, что происходитявляется то, что код, для любого ввода, будет возвращать все остальные числа.Для каждого кандидата count++
происходит ровно один раз.Таким образом, он достигает 2 и сбрасывается через раз.
Третья ошибка состоит в том, что, как только самый внутренний цикл будет зафиксирован, продолжение будет делать неправильную вещь, поскольку он только продолжает самый внутренний цикл.