OriginalGriff
Поскольку вы начинаете с индекса 1-и он равен нулю, вы устанавливаете его таким образом. Это означает, что он "не простой", поэтому вы его игнорируете.
Когда вы входите в цикл, ваш индекс равен 2 - и это все еще один, так что это простое число.
Вы входите во внутренний цикл, который устанавливает каждое кратное индекса в ноль, чтобы указать, что они не являются простыми. Потому что 2 - это первое четное число (по определению), которое удаляет все четные числа из вашего сита при установке prime[i*j]=0;
Таким образом, после первой итерации вашего внешнего цикла 1 не является простым, 2 является простым, 3 является простым, 4 не является, 5 является и так далее. Это и есть та картина, которую вы видите.
Я не понимаю внутренний цикл здесь в первой итерации он делает все четные числа равными нулю? For (j=i;i*j<10000;j++) {prime[i*j]=0} Index i=2 when enter the loop I=j=2 2*2=4< 10000 J++ This mean start j=2 then multiply it j=2*2 if it under 10000 then increment j with 1, so after it is 3*3=9 (?) i dont understand this part!!
Когда вы пишете for
петля, она состоит из четырех частей:
for (initialization; condition; modification)
execution statement
То
execution statement
очевидно-это код, который выполняется каждый раз, когда вы обходите цикл. В вашем случае это так:
{prime[i*j]=0;}
То
initialization
позволяет настроить начальные значения для цикла:
j = 1
То
condition
если тестируется каждый раз, когда вы собираетесь войти в цикл, и если это правда, цикл продолжается. Если он равен false, цикл завершается без выполнения
execution statement
снова.
i*j<10000
То
modification
если выполняется в конце каждого выполнения
execution statement
чтобы настроить цикл для следующей итерации:
j++
Итак, вы начинаете с установки
j
до значения i и повторяйте цикл до тех пор, пока
i * j
превышает (или равно) 10000.
Есть смысл?
а, понял!!!! это означает, что i=2, потому что инициализация и j =2, потому что условие истинно 4<10000, он выполнит оператор выполнения, тогда j будет увеличен до 3, так что i*j<10000 -> 6 <10000, поэтому все значение четного числа в массиве станет 0, тогда для i=j=3 он сделает значение кратного 3 равным 0 в массиве и так далее?
Это же де Банни! :большой палец вверх:
большое вам спасибо!!!!!!!!!!!!!!!!!!!!!!!!! для подробного объяснения!!!!!!!!!!!!!! надеюсь найти кого-то вроде тебя снова каждый раз, когда я путаюсь!!! лол
Пожалуйста!
Member 13188016
Я не понимаю внутренний цикл здесь в первой итерации он делает все четные числа равными нулю?
Для(К=Я;Я*й на<10000;к++) {премьер - [Я*ж]=0}
Индекс i=2 при входе в цикл
I=j=2
2*2=4 & lt;10000
Дж++
Это означает, что начните j=2, затем умножьте его j=2*2, если он меньше 10000, а затем увеличьте j на 1, так что после того, как он равен 3*3=9 (?), я не понимаю эту часть!!
Member 13188016
Все еще не понимаю внутреннюю часть петли
Для (К=Я;Я*й на<10000;к++) {простое число(я*к)=0}
Означает i=j=2
2^2= & lt;10000 (означает, что если условие true будет обрабатывать последнее или будет увеличивать j++ до тех пор, пока оно не достигнет 10000?); j++
А если j увеличивается на 1, то должно быть 3*3=9, так почему же четное число все было исключено? Происходит ли исключение в первой итерации?
Member 13188016
а, понял!!!!
это означает, что i=2, потому что инициализация
и j =2
поскольку условие истинно 4< 10000, он выполнит оператор выполнения
тогда j будет увеличено до 3
Итак, i*j< 10000 -> 6 < 10000, поэтому все значения четного числа в массиве становятся 0
тогда для i=j=3 это сделает значение кратного 3 равным 0 в массиве
и так далее?