Prime_check


0

Здравейте, 

Някой има ли идея дали задача 7 от домашното за Оператори и изрази може да се реши само с наученото от лекцията, т.е. без for цикли, if-ове, while и т.н.? Ако някой има идеи ще ми е интересно да ги разгледам!




Отговори



3

По принцип може да си направиш масив с всички прости числа, по-малки от 100 и да проверяваш дали числото се съдържа в него, но на практика е безумно :)

var arr = [2, 3, 5 ...];

var number = +args[0];

return arr.indexOf(number) > -1 ? true: false;

За да няма цикъл и вътрешно, при проверката на индекса, всъщност по-добре да е масив от 101 елемента с булеви стойности, като на индексите - прости числа да има стойности true, на останалите - false, така може да се върне:

return arr[number];

Шегата настрана, повечето домашни изискват да се гледа материал напред, да се рови в нета и т.н. Това създава важни навици и умения, които ще са ви от полза и след Академията.


от topalkata (6442 точки)


0

Докато условието е числата да са по-малки от 100, може :)

function solve(args) { var n = +args[0], result = (n === 2 || n === 3 || n === 5 || n === 7 || n === 11 || n === 13 || n === 17 || n === 19 || n === 23 || n === 29 || n === 31 || n === 37 || n === 41 || n === 43 || n === 47 || n === 53 || n === 59 || n === 61 || n === 67 || n === 71 || n === 73 || n === 79 || n === 83 || n === 89 || n === 97) ? 'true' : 'false'; return result; }


от ZachD (273 точки)


0

пробвах го работи 100 % , но не разбрах защо не се проверява за числата: 9 , 15, 25, 27, 33, 35, 39, 45, 49,51,55,57,63,65,69,...- може би защото са производни на 3,5,7,...

:)

а четните числа?


от webdesign (52 точки)

0
Точно това е идеята, да не се проверява за тези числа, защото те не са прости. Прости числа са САМО тези, които не могат да се делят на нищо друго освен на себе си и на 1 и само те се търсят в условието на задачата. Никое от числата които си изброил не е просто и за това не се проверява за него, защото то не се търси в условието и би дало грешен резултат и съответно по малко точки в BGCoder.




1

Най-простото решение, за което се сещам е това:

function solve(args) { var input = +args[0], isPrime = (input === 1 || (input != 2 && input % 2 === 0) || (input != 3 && input % 3 === 0) || (input != 5 && input % 5 === 0) || (input != 7 && input % 7 === 0)) ? false : true; return isPrime; }

ЕДИТ: @ ZachD и rumen_stoyanov Добра забележка за if-a. Проеням веднага.  


от vasilv (275 точки)


0

Идеята е добра, само if с ?:



0

пробвах го работи 100 % но не разбрах идеята , ако може малко пояснение!

:)


от webdesign (52 точки)



0

Ето още едно решение:

function solve(args) {
    var num = +args[0];
    var isPrime = true;

    if (num < 0 || num === 0 || num === 1) {
        isPrime = false;
    }
    else {
        for (var i = 2; i <= Math.sqrt(num); i += 1) {
            if (num % i === 0) {
                isPrime = false;
                break;
            }
            else {
                isPrime = true;
            }
        }
    }

    return isPrime;
}


от dilqna9 (0 точки)


-1

function solve(args) {
    var number = +args[0];
    var prime = true;
    if (number < 2) {
        prime = false;
        console.log(prime);
    }
    else if (number < 4) {
        console.log(prime);
    }
    else {
        for (var i = 2; i < Math.sqrt(number); i+=1) {
            if (number % i === 0) {
                prime = false;
                break;
            }
        }
        console.log(prime);
    }
}

Решение и от мен!




0
Тези решения са добри и напълно правилни, но въпроса най-горе беше как може да се направи задачата без да се ползват неща, които не са учени до момента на тази лекция (Оператори и изрази). Иначе казано без цикли, условни конструкции и други удобства :). Затова според мен са дали условието числата да са под 100. Вижте как е направено решението на vasilv - само с оператори и изрази.

от ZachD (273 точки)