В следующем коде почему j должно быть меньше i, почему j <= n не работает (4-я строка)? - PullRequest
0 голосов
/ 26 сентября 2019

Я не могу понять 4-ю строку. Почему она не работает, когда я пишу, что j <= n .. </p>

let n = 10;

nextPrime:
  for (let i = 2; i <= n; i++) { // for each i...

    for (let j = 2; j < i; j++) { // look for a divisor..
      if (i % j == 0) continue nextPrime; // not a prime, go next i
    }

    alert(i); // a prime
  }

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Простые числа - это числа, которые делятся только на одного и на себя.

Этот код работает:

for (let j = 2; j < i; j++) { // here you have to iterate only t
    if (i % j == 0) continue nextPrime; // not a prime, go next i
}

, потому что для каждого i необходимо знать,есть меньшее число, которое i делится на него.

Например:

i === 6;

Чтобы знать, является ли оно простым, вам не нужнопроверьте 1 и 6, но все остальные числа: 2, 3, 4 и 5. Поскольку 6 делится на 2, вы уже знаете, что это не простое число и может перейти к следующему числу.

ТоВот почему вы используете j<i, а не j<=n.

0 голосов
/ 26 сентября 2019

Мы перебираем различные значения j, проверяя, делят ли они i.Если значения j делить i отсутствуют, тогда i должно быть простым.Если вы отметите все j<=n, то в какой-то момент у вас будет j=i, а затем j делит i, поэтому программа заключит, что i не является простым.Вот почему вы должны остановиться до этого.На самом деле вы могли бы остановиться на j<=sqrt(i), что было бы более эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...