Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какой вариант решения лучше?

eshth strhrtj Гуру (3961), открыт 1 день назад
chatGPT удтверждает что решение №2 лучше в плане эффективности и читаемости.

Пример №1
 function checkPrime(n) { 
if (n % 2 == 0)
return false;

const sqrtN = Math.sqrt(n);

for (let div = 3; div <= sqrtN; div += 2) {
if ( (n % div) == 0) {
return false;
}
}

return true;
}

function minimumNumber(numbers) {
let sum = numbers.reduce((sum, number) => sum + number, 0);
let min;

for (min = 0; !checkPrime(sum + min); min++);

return min;
}
Пример №2
 function isPrime(n){ 
for(var i = 2; i<=Math.sqrt(n); i++)
if (n%i==0)
return false;

return n > 1;
}

function minimumNumber(numbers){
for(var i = 0, n = numbers.reduce((p,c) => p+c); !isPrime(n+i); i++) {}

return i;
}
Проголосовало 9 чел
Варианты ответов
3
6
Комментарии
koshkaЗнаток (444) 1 день назад
это что
koshka, Карбюратор
АндрейВысший разум (472484) 1 день назад
Второй вариант ужасен, т.к. в нём Math.sqrt(n) заново вычисляется на каждой итерации цикла. А это совсем не быстрая операция. И сам цикл делает вдвое больше итераций, чем требуется. Никакой эффективности в помине нет.

Первый же вариант ошибочен, т.к. n == 2 он НЕ считает простым числом. Если это исправить, первый вариант будет многократно лучше.
eshth strhrtj Гуру (3961) Андрей, понял спасибо
ПапаВысший разум (148310) 1 день назад
Оба хуже.
По асимптотической сложности - одинаково неэффективно.
За вот такое на каждой итерации цикла в серьёзных проектах по рукам дают: i<=Math.sqrt(n)
Об ошибке в checkPrime тебе уже сказали.

Многократная проверка чисел на простоту делается либо решетом Эратосфена, либо, как минимум, предварительным расчётом простых делителей. Каждый раз перебирать все нечётные числа - сгодится разве что одноразовой домашки для учителя из тех, кто задают суммировать арифметическую прогрессию циклом.
Ivan IvanovМастер (2282) 1 день назад
В плане читаемости оба плохи, хотя первый лучше. Хотя это ему не поможет. А добиваться эффективности в яваскрипте такое себе занятие.
больше не чат гпт ????Мыслитель (8810) 12 часов назад
новая которая на сайте o3-mini? на самом деле это немного урезанная версия, есть платная o3-mini high, говорит что, типо, первый вариант немного ошибочный, но если исправить ошибку то норм, а второй не очень эффективный из-за цикличного перебора, но, мол, для типичных входных данных (как в задачах типа Codewars) разница несущественна. по итогу он сказал что лучше всё же первый если доработать, ну а второй разве что просто красивее выглядит