Вот функция JavaScript, проверяющая, является ли число простым:
Метод 1: базовая итерация
function isPrime(num) {
if (num <= 1) {
return false;
}
for (let i = 2; i < num; i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
Метод 2: оптимизированная итерация
function isPrime(num) {
if (num <= 1) {
return false;
}
if (num <= 3) {
return true;
}
if (num % 2 === 0 || num % 3 === 0) {
return false;
}
for (let i = 5; i * i <= num; i += 6) {
if (num % i === 0 || num % (i + 2) === 0) {
return false;
}
}
return true;
}
Метод 3: Решето Эратосфена
function sieveOfEratosthenes(num) {
const primes = new Array(num + 1).fill(true);
primes[0] = primes[1] = false;
for (let i = 2; i <= Math.sqrt(num); i++) {
if (primes[i]) {
for (let j = i * i; j <= num; j += i) {
primes[j] = false;
}
}
}
return primes;
}
function isPrime(num) {
const primes = sieveOfEratosthenes(num);
return primes[num];
}
В методе 1 мы перебираем от 2 до num - 1
и проверяем, делит ли какое-либо число num
. Если мы находим делитель, мы возвращаем false
. Если делитель не найден, мы возвращаем true
.
В методе 2 мы оптимизируем итерацию следующим образом:
- Проверка того, что
num
меньше или равно 1, и если да, то возвращаетсяfalse
. - Проверка, меньше ли
num
или равно 3, и если да, то возвращаетсяtrue
. - Проверка того, делится ли
num
на 2 или 3, и если да, то возвращаетсяfalse
. - Итерация от 5 до квадратного корня из
num
с шагом 6 и проверка, делится лиnum
наi
илиi + 2
. Если какой-либо делитель найден, мы возвращаемfalse
.
В методе 3 мы используем алгоритм «Решето Эратосфена» для генерации логического массива простых чисел до num
. Затем мы проверяем, присутствует ли num
в массиве простых чисел.