кароч чет уже подтупливаю... есть задача представить массив чисел любой длины в виде матрицы... то есть формально, зная длину массива L, подобрать для матрицы длину M и ширину N, таким образом, чтобы лишнее число элементов матрицы, получившееся в итоге было минимальным... то есть зная L, подобрать M и N таким образом, чтобы получить M * N минимально большее или равное L (M * N = L)... L, M и N само собой целые числа... если брать M=N=Math.Ceil(Math.Sqrt(L)) получается слишком большой трешхолд для больших чисел (для массива длиной миллион получается примерно 2500 лишних элементов в матрице)...
M * N = L L - либо простое, либо составное. Если составное - любая его факторизация дает искомые числа. Если простое - ищем ближайшее меньшее не простое.
впрочем, получив квадрат, можно применить бинарный поиск.. Код (Text): int delta=0, m=(input), n=m, tmp=m, threshold=(input); for tmp > 1 go delta=tmp/2; if ( m^2 - (m + delta)*(n - delta) > threshold ) tmp =delta; else break for; end for
а можно совсем забавный метод применить.. Код (Text): if (isOdd(L) == true)tmp =L+1; else tmp=L; m=2; n=tmp/2;