08.09.2021, 15:40
|
Новичок на форуме
|
|
Регистрация: 13.10.2020
Сообщений: 4
|
|
Как найти простые числа в массиве?
Дан следующий массив
let arr = [1, 2, 3, 6, 9, 18];
Как с помощью цикла и условных операторов найти в нем простые числа и добавить в новый массив? Если взять отдельное число и проверить на простоту - проблем не возникает, но в массиве сложно. Спасибо!
|
|
08.09.2021, 15:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Brava,
arrновый = arrстарый.filter(х=> проверить на простоту - проблем не возникает(х))
|
|
08.09.2021, 15:48
|
Новичок на форуме
|
|
Регистрация: 13.10.2020
Сообщений: 4
|
|
рони,
а есть решение без метода filter?
|
|
08.09.2021, 15:56
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Brava,
for () if(проверить на простоту - проблем не возникает(х))arrновый.push(x)
|
|
08.09.2021, 15:57
|
|
Профессор
|
|
Регистрация: 07.03.2011
Сообщений: 1,138
|
|
Решето Эратосфена.
Легких путей определения что число является простым нету. Только честная проверка каждого числа.
На сложности задачи разложения числа на простые множители и держится современная криптография и алгоритмы хеширования.
|
|
08.09.2021, 22:29
|
Кандидат Javascript-наук
|
|
Регистрация: 07.05.2020
Сообщений: 108
|
|
<body>
</body>
<script>
const arr1=[1, 2, 3, 6, 9, 18,13,17]
const arr2=primeNumbers(Math.max(...arr1))
let arr3=[]
for (let i=0; i<=arr1.length; i++){
for (let j=0; j<arr2.length; j++){
if(arr1[i]===arr2[j]) arr3.push(arr1[i])
}
}
document.write(arr3)
function primeNumbers (n){
let arr=[]
for (let i=2; i<=n; i++){
let f=true
for (let j=0; j<arr.length; j++){
if (i%arr[j]===0){
f=false
break;
}
}
if (f){
arr.push(i)
}
}
return (arr)
}
</script>
|
|
08.09.2021, 23:04
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
od0201,
если 14 строка let arr={}, то строка 8 не нужна.
|
|
08.09.2021, 23:49
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
вариант
const isPrime = n => { //можно усовершенствовать
if (n === 2 || n === 3) return true
if (n <= 1 || n % 2 === 0 || n % 3 === 0) return false
const sqrt = Math.sqrt(n);
for (let i = 5; i <= sqrt; i += 2) if (n % i === 0) return false
return true
}
const arr = [1, 2, 3, 6, 9, 18, 13, 17]
//const res = arr.filter(isPrime)
const res = []
for (let i = 0; i < arr.length; i++) isPrime(arr[i]) && res.push(arr[i])
alert(res)
console.log(res)
|
|
12.09.2021, 21:51
|
Кандидат Javascript-наук
|
|
Регистрация: 07.05.2020
Сообщений: 108
|
|
Сообщение от рони
|
od0201,
если 14 строка let arr={}, то строка 8 не нужна.
|
не догнал
|
|
12.09.2021, 22:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
od0201,
<body>
<script>
const arr1 = [1, 2, 3, 6, 9, 18, 13, 17];
const arr2 = primeNumbers(Math.max(...arr1));
let arr3 = [];
for (let i of arr1) {
if (i in arr2) arr3.push(i)
}
document.write(arr3)
function primeNumbers(n) {
let arr = {};
f: for (let i = 2; i <= n; i++) {
for (let j in arr) {
if (i % j === 0) continue f;
}
arr[i] = true
}
return (arr)
}
</script>
</body>
Последний раз редактировалось рони, 12.09.2021 в 23:32.
|
|
|
|