@dmitriyivvvv

Как можно оптимизировать код для проверки числа на простоту?

Вот что у меня получилось :
function isPrime(num) {
  for (var i = 2; i <= Math.sqrt(num);) {
    if (num % i == 0) return false;
    i == 2 ? i++ : i += 2;
  }
  return num > 1;
}

Можно ли еще как то оптимизировать этот код?
  • Вопрос задан
  • 2364 просмотра
Решения вопроса 1
usdglander
@usdglander
Yipee-ki-yay
Я так понимаю, что нужно не нахождение простых чисел, а эффективная проверка числа на простоту. Ваше решение представляет собой классическое решение "в лоб", которое, разумеется работает и даёт стопроцентно точный результат. Однако, помимо простого перебора всех чисел от 2 до sqrt(n) есть и более эффективные алгоритмы. На ум быстро приходит два метода оптимизации:

1. Если не нужна прям гарантия простоты, то можно воспользоваться тестом Рабина-Миллера. Есть ряд чисел, которые не являются простыми, но проходят этот тест. Про них можно почитать и добавить в дополнительное условие.

2. Можно использовать свойство составных чисел, что они не только не делятся на числа из диапазона 2 .. sqrt(n), но так же не делятся ни на одно из простых чисел меньше sqrt(n). Если после отработки функции isPrime сохранять переданное число в массив, если оно оказалось простым, то можно организовывать цикл не по диапазону 2 .. sqrt(n), а по массиву уже известных простых чисел.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
function isPrime( num ) 
{
  if( num <= 1 )
    return false;

  for( i = 2; i * i <= num; i ++)
  { 
      if( num % i == 0 ) 
        return false;
  }
  return true;
}
Ответ написан
@SupportXXXL
const isPrime = num => !(num <= 1 || num & 1)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
20 апр. 2024, в 13:23
1000 руб./за проект
20 апр. 2024, в 12:50
30000 руб./за проект
20 апр. 2024, в 12:01
20000 руб./за проект