Есть программа по созданию таблицы простых чисел.
#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)
я правильно сделал?