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 08.06.2022 17:03

Простые числа от 1 до n
 
Застрял на задачке. Нужно вывести простые числа от 1 до заданного числа. У меня выводится только последнее число:

const getPrimes = n => {
    let isPrime;
    for (let i = 1; i <= n; i++) {
        for (let j = 1; j <= i; j++) {
            if (i % j !== 0) {
                isPrime = j;
            }
        }
    }
    return isPrime;

}


console.log(getPrimes(12));

рони 08.06.2022 17:13

Цитата:

Сообщение от NovichokJS
У меня выводится только последнее число:

наверно нужен некий объект для сбора отфильтрованных чисел ...

ksa 08.06.2022 17:16

Как вариант...
const n = 10
const a = []
for (let i = 2; i <= n; i++) {
	let ok = true
	for (let j = 0; j < a.length; j++) {
		if (i % a[j] === 0) {
			ok = false
			break
		}
	}
	if (ok) a.push(i)
}
alert(a)

NovichokJS 08.06.2022 17:19

Цитата:

Сообщение от ksa (Сообщение 546017)
Как вариант...
const n = 10
const a = []
for (let i = 2; i <= n; i++) {
	let ok = true
	for (let j = 0; j < a.length; j++) {
		if (i % a[j] === 0) {
			ok = false
			break
		}
	}
	if (ok) a.push(i)
}
alert(a)

так нужно от 1 искать, у вас от 2

NovichokJS 08.06.2022 17:21

нужно проверить от 1 до n. Если в ваш код поставить let i = 1, то работать не будет

NovichokJS 08.06.2022 17:22

аа...тогда в j тоже поставить 1 и работает)

NovichokJS 08.06.2022 17:25

и без флага let ok = true, никак нельзя?

ksa 08.06.2022 17:26

Цитата:

Сообщение от NovichokJS
так нужно от 1 искать

Тебя ввели в заблуждение... :)
Цитата:

Просто́е число́ — натуральное число, имеющее ровно два различных натуральных делителя.
https://ru.wikipedia.org/wiki/Простое_число

ksa 08.06.2022 17:26

Цитата:

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

Сделай без флага... Это ведь твоя задача. ;)

NovichokJS 08.06.2022 17:43

Цитата:

Сообщение от ksa (Сообщение 546023)
Сделай без флага... Это ведь твоя задача. ;)

буду пробовать, спасибо!

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, время: 15:39.