JavaScript

Как вычислять простые числа?

Решил я тут вычислить первые 10000 простых чисел.
Пошёл по самому простому пути (что первое в голову пришло, то и написал).
Сравнил полученные числа с таблицой простых чисел и понял, что что-то ЯВНО делаю не так ведь: 13*13= 169, а это не простое число

Как тогда вычислить все простые число до 10000?
Shahzod Po'latov
Shahzod Po'latov
204
С простыми числами у меня проблем никогда не возникало. Обошелся даже без старины Эратосфена
arr = [];
for (var n = 0; n < 100; n++) {
test = true;
for (var i = n - 1; i > 1; --i) {
if (n % i == 0) {
test = false;
break;
}
}
if(test) {arr.push(n)}
}
console.log(arr)
Petr Rakovcen
Petr Rakovcen
75 326
Лучший ответ
Shahzod Po'latov А что такое % это оператор? Просто в интернете найти не получилось.
Денис Нейбауэр for (var i = n - 1; i > 1; --i)

А это для чего?) Как-раз выгоднее начинать с i = 2, значительная часть чисел отсеится на первых итерациях.

А от n - 1 до i = √n все итерации всегда будут давать false
>Как вычислять простые числа?
При помощи решета Эратосфена.

>Сравнил полученные числа с таблицой простых чисел и понял, что что-то ЯВНО делаю не так
Ну, судя по твоему коду, после 11 простые числа заканчиваются, так что ты ВСЕ делаешь не так.
ДК
Дима Козырев
88 971
Shahzod Po'latov Как решить этот пример? При помощи мозга!
Shahzod Po'latov Нет. Они шли до 13*13 (169 вроде) 17*17 и т. д.
const isPrime = (num) => {
let prime;
if (num <= 5 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
let n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num? true : false;
}
return prime;
}
let str = "";
for (let n = 1; n < 10000; n += 1) if (isPrime(n)) str += n + "<br>";
document.write(str);
Denis Poberezhny
Denis Poberezhny
59 490
Логика простая. Определяешь простоту чисел последовательно от 2 до n. Каждое число делишь на до сих пор известные простые числа. Если не делится ни на одно, значит нашел ещё простое число и добавляешь его в список.
Burhan Ray Guliev
Burhan Ray Guliev
67 281
Иногда проще показать на примере, чем объяснять как это делать.