Encontrar el tamaño óptimo de columna y fila para una tabla con n elementos y un rango dado para su proporción

Estoy buscando una forma óptima de crear una tabla a partir de n elementos para que, idealmente, no haya celdas vacías, pero al mismo tiempo la proporción de las columnas / filas de dimensiones de la tabla se acerque lo más posible a 1.

Por supuesto, si n es un número cuadrado, es fácil desde entonces

cols = rows = sqrt( n );

Si n es un número primo, también está claro que habrá celdas vacías, por lo que mi forma actual de manejar esto es:

rows = floor( sqrt(n) );
cols = ceil( n / rows  );

Para todos los demás casos, mi plan es obtener los factores primos de ny luego buscar todas las permutaciones posibles para aquellas cuya combinación tiene proporciones más cercanas a 1.

Entonces mi pregunta es: ¿hay una mejor manera de hacer esto? ¿O hay al menos una forma de no tener que probar todas las combinaciones posibles de los factores primos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta