@EvgeniyRava

Что требуется сделать в задании?

Есть программа по созданию таблицы простых чисел.
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int p,d,cases;
        for (p=1; p<=100; ++p) {
            cases = 1;
            for (d = 2; d<p; ++d)
                if (p % d == 0)
                    cases = 0;
                if (cases != 0)
                    NSLog(@"%i",p);
                }
    }
    return 0;
}


По заданию нужно
Программа 6.10 в ряде случаев работает неэффективно. Например, это касается проверки четных чисел. Поскольку любое четное число больше 2 не может быть простым, программа могла бы пропускать все четные числа и как возможные простые числа, и как возможные делители. Внутренний цикл for тоже работает неэффективно, поскольку для р все время выполняется деление на все значения d от 2 до р-1. Чтобы избежать этой неэффективности, можно добавить значение cases в условия for. Тогда вы можете задать выполнение цикла for до тех пор, пока не найден делитель и значение d меньше р. Модифицируйте программу 6.10, чтобы внести эти два изменения, затем выполните эту программу, чтобы проверить ее работу.

Получается так вроде бы
for (d = 2; d<p || cases == 1; ++d)
? Как его в цикл добавить если перед циклом мы объявляем значение переменной cases 1; когда начинается цикл то переменная cases по умолчанию 1, а мне нужно выходить из цикла когда значение 1. Выходит нужно изначально объявить значение cases 0 и в условие проверять когда оно будет равно 1?
А по поводу того
Поскольку любое четное число больше 2 не может быть простым, программа могла бы пропускать все четные числа и как возможные простые числа, и как возможные делители.

Это выходит (p % 2 == 0 || p % 5 == 0) я правильно сделал?
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
Зачем Cases добавлять в условие? Ведь Cases является грубо говоря нулевым значение 1-True, 0-False.
Именно затем и добавлять - чтобы прервать выполнение цикла, когда значение уже найдено.

Выполнять цикл пока значение Cases не будет 1?
Сказано же добавить в for, а не заменить, так что условием будет не только это.

Получается программа зациклиться или я ошибаюсь?
Ошибаетесь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы