方法如下:
取整数n
作为函数的输入。目标是获得“最平方”的表。正如@John 建议的那样,我们必须计算sqrt(n)
才能了解尺寸。另一方面,我们必须计算 的所有除数,n
以便选择最接近 的除数sqrt(n)
。
我们如何选择最接近的低值?我们可以使用这个技巧(Python):找到最接近未完全排序的列表中的值的项目的索引,并获取除数列表中最接近的值的索引,比方说hIndex
。n
然后可以通过除以divisors[hIndex]
或使用新索引来计算另一个维度wIndex = hIndex + 1
并得到divisors[wIndex]
。
Python 代码是这样的(请注意,我使用了惰性求值来查找除数):
import numbers
from math import sqrt
def get_dimensions(n):
tempSqrt = sqrt(n)
divisors = []
currentDiv = 1
for currentDiv in range(n):
if n % float(currentDiv + 1) == 0:
divisors.append(currentDiv+1)
#print divisors this is to ensure that we're choosing well
hIndex = min(range(len(divisors)), key=lambda i: abs(divisors[i]-sqrt(n)))
wIndex = hIndex + 1
return divisors[hIndex], divisors[wIndex]