Задачи с собеседований по максимальным числам: как решить?
Отсортировать по убыванию и двумя циклами – некошерно?на JSconst maxprod = arr => {
  const a = arr.slice().sort((a, b) => b - a);
  const max = a[0];
  const len = a.length;
  let iter = 0;
    
  for (let i = 1; i < len - 2; i++) {
    iter++;
    const A2 = a[i];
    const x2 = max / A2;
    if (!Number.isInteger(x2)) continue;
      
    for (let j = i + 1; j < len - 1; j++) {
      iter++;
      const A3 = a[j];
      const x3 = x2 / A3;
      if (!Number.isInteger(x3)) continue;
      
      if (!!~a.indexOf(x3)) {
        return [max, A2, A3, x3, iter]);
      }
    }
  }
  
  return false;
}
По сути циклов три, т.к. indexOf() всё равно перебирает массив.
Из оптимизаций только отсечение мелких хвостов, когда произведение становится меньше искомого.
И проверка каждого кандидата на делимость.
В хвост результата пихается ещё число итераций.Тесты[
  [20,5,3,2,2], // [ 20, 5, 2, 2, 3 ]
  [7,9,4,60,5,3,2,2], // [ 60, 5, 4, 3, 4 ]
  [1,2,3,199], // false
  [2430,2431,2431,2431,1,1,1,2,3,5,7,9,11,13,15,17,19,23], // [ 2431, 17, 13, 11, 8 ]
].forEach(test => console.log(test, maxprod(test)));
допустим целых
хороший прикид
там, случаем, что множители целые "допустим" не отвалилось?