JSFiddle - React, Tailwind, and code Playground
by oceog
HTML
<SPAN id=body></SPAN>
JavaScript
arr1 = [2, 3, 6, 8, 9, 11, 98];
arr2 = [1, 6, 7, 9, 48, 49, 50];
Q= 4802;
var max= arr1[arr1.length-1]*arr2[arr2.length-1]+Q; // всегда больше любого произведения и Q
var result=[-max, 1]; // всегда дальше от Q чем любое из произведений
var cursor= arr2.length-1;
for (var i=0; i<arr1.length; i++) {
while (cursor>0 && arr1[i]*arr2[cursor] > Q)
cursor--;
var tmp = [
Math.abs(Q-result[0]*result[1]),
Math.abs(Q-i*arr2[cursor]),
Math.abs(Q-i*arr2[cursor+1])];
if (cursor==arr2.length-1) tmp[2]=max+1;
result= [
result,
[i,arr2[cursor]],
[i,arr2[cursor+1]]
][tmp.indexOf(_.min(tmp))];
};
body.innerHTML=result[0]+" * "+result[1]+" = "+result[0]*result[1];