JavaScript

Заполнение массива случайными простыми числами в диапазоне от 2 до n

Заполнить массив с фиксированной четной длиной простыми числами в диапазоне от 5 до 15 так, что бы у каждого числа была пара. Язык: Javascrypt. К примеру в результате работы кода должен получиться массив, похожий на этот -> [5, 7, 5, 11, 13, 7, 13, 11]
Если изначально дан диапазон, можно не заморачиваться с функцией нахождения простых чисел.

let arr = [5, 7, 11, 13];

console.log( arr.concat(arr).sort( (a,b) => Math.random() < 0.5 ? -1 : 1 ) );
______________

К начальному массиву приклеивается еще один такой же, потом сортируется в случайном порядке.
______________

Решение для любого диапазона:

function bubu(start, end) {
  let prime = [];
  let sieve = new Array(end).fill(true);

  for (let i = 2; i < end; i++) {
    if (sieve[i]) {
      if (start <= i) prime.push(i);
      for (let j = i; j < end; j += i) sieve[j] = false;
    }
  }

  return prime.concat(prime).sort( (a,b) => Math.random() - 0.5 );
}

console.log(bubu(11, 38));

https://ru.wikipedia.org/wiki/Решето_Эратосфена
Эдуард Самохин
Эдуард Самохин
62 360
Лучший ответ
Евгений Скробачев На выходе должен получиться массивый похожий на это. --> [5, 7, 5, 11, 13, 7, 13, 11]. Массив по типу ---> [5, 7, 5, 11, 7, 11, 13, 11, 13] неверный, поскольку у последнего числа 11 нет пары.
Я такое придумал. И у каждого простого числа есть одно парное число, как и требовалось
>>>
arr = [];
for (var n = 5; n <= 16; n++) {
test = true;
for (var i = n - 1; i > 1; --i) {
if (n % i == 0) {
test = false;
break;
}
}
if(test) {
arr.push(n,n) // длина массива будет фиксированно четной
}
}
console.log(arr);
//получили массив попарных простых чисел от 5 до 15
// теперь перемешиваем их в случайном порядке
// у каждого числа должна быть пара
function randArr(n) {
return Math.floor(Math.random()* n); // n = 8
}
function mergeArr(a) {
for (var i = 0; i < a.length; i++) {
var j = randArr(a.length); // arr. length = 8
var k = randArr(a.length);
var t = a[j];
a[j] = a[k];
a[k] = t;
}
return a;
}
console.log('Итог: ', mergeArr(arr));
Константин Ванченко А вообще всё даже проще.
arr = [3,5,7,11,13];
arr2 = arr.concat(arr.slice());
console.log(arr2);
for (var i = 0; i < arr2.length; i++) {
j = Math.floor(Math.random() * arr2.length);
k = Math.floor(Math.random() * arr2.length);
t = arr2[k];
arr2[k] = arr2[j];
arr2[j] = t;
}
console.log(arr2)