Просмотр полной версии : Простые числа от 1 до n
NovichokJS
08.06.2022, 17:03
Застрял на задачке. Нужно вывести простые числа от 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));
У меня выводится только последнее число:
наверно нужен некий объект для сбора отфильтрованных чисел ...
Как вариант...
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
Как вариант...
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, никак нельзя?
так нужно от 1 искать
Тебя ввели в заблуждение... :)
Просто́е число́ — натуральное число, имеющее ровно два различных натуральных делителя.
https://ru.wikipedia.org/wiki/Простое_число
без флага let ok = true, никак нельзя?
Сделай без флага... Это ведь твоя задача. ;)
NovichokJS
08.06.2022, 17:43
Сделай без флага... Это ведь твоя задача. ;)
буду пробовать, спасибо!
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
без флага 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-for#metki-dlya-break-continue
NovichokJS
09.06.2022, 21:55
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-for#metki-dlya-break-continue
понять бы как работает в строке 3 это lab:
NovichokJS
09.06.2022, 21:59
по ссылке, которую вы дали, не нахожу чтобы понять что такое метка lab; и как оно работает
с помощью метода reduce?)
и какой массив будем перебирать?
что такое метка lab; и как оно работает
без lab continue прыгнуло бы на j++, а с lab на i++.
:) :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
:) :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))
ооогоо))) думал полегче будет)
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot