Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Простые числа от 1 до n (https://javascript.ru/forum/misc/84128-prostye-chisla-ot-1-do-n.html)

NovichokJS 09.06.2022 21:33

ребята, а можно мастер-класс? Сможете решить это с помощью метода reduce?)

const getPrimes = n => {
    const a = [];
    for (let i = 1; i <= n; i++) {
        let ok = true;
        for (let j = 1; j < a.length; j++) {
            if (i % a[j] === 0) {
                ok = false;
            }
        }
        if (ok === true) a.push(i);
    }
    return a;

}

Alexandroppolus 09.06.2022 21:51

Цитата:

Сообщение от NovichokJS
без флага let ok = true, никак нельзя?

const getPrimes = n => {
    const a = [];
    lab: for (let i = 1; i <= n; i++) {
        for (let j = 1; j < a.length; j++) {
            if (i % a[j] === 0) {
                continue lab;
            }
        }
        a.push(i);
    }
    return a;
}


https://learn.javascript.ru/while-fo...break-continue

NovichokJS 09.06.2022 21:55

Цитата:

Сообщение от Alexandroppolus (Сообщение 546034)
const getPrimes = n => {
    const a = [];
    lab: for (let i = 1; i <= n; i++) {
        for (let j = 1; j < a.length; j++) {
            if (i % a[j] === 0) {
                continue lab;
            }
        }
        a.push(i);
    }
    return a;
}


https://learn.javascript.ru/while-fo...break-continue

понять бы как работает в строке 3 это
lab:

NovichokJS 09.06.2022 21:59

по ссылке, которую вы дали, не нахожу чтобы понять что такое метка lab; и как оно работает

рони 09.06.2022 22:44

Цитата:

Сообщение от NovichokJS
с помощью метода reduce?)

и какой массив будем перебирать?

рони 09.06.2022 22:47

Цитата:

Сообщение от NovichokJS
что такое метка lab; и как оно работает

без lab continue прыгнуло бы на j++, а с lab на i++.

рони 09.06.2022 23:00

:) :write:
const getPrimes = length => {
            return Array.from({
                length
            }, (_, i) => ++i).reduce((a, b) => {
                let max = Math.floor(Math.sqrt(b));
                if (a.slice(1, max).every(e => b % e)) a.push(b);
                return a
            }, [])
        }
    console.log(getPrimes(120))

NovichokJS 09.06.2022 23:13

Цитата:

Сообщение от рони (Сообщение 546039)
:) :write:
const getPrimes = length => {
            return Array.from({
                length
            }, (_, i) => ++i).reduce((a, b) => {
                let max = Math.floor(Math.sqrt(b));
                if (a.slice(1, max).every(e => b % e)) a.push(b);
                return a
            }, [])
        }
    console.log(getPrimes(120))

ооогоо))) думал полегче будет)


Часовой пояс GMT +3, время: 01:54.