アプローチは次のとおりです。
n
関数の入力として整数を取ります。目標は、「最も正方形」のテーブルを取得することです。@John が示唆しsqrt(n)
たように、寸法を把握するには計算する必要があります。一方n
、 に最も近い約数を選択するには、のすべての約数を計算する必要がありますsqrt(n)
。
最も近い低い値を選択するにはどうすればよいでしょうか? このヒント (Python) を使用できます:完全にソートされていないリスト内の値に最も近い項目のインデックスを見つけ、除数のリスト内の最も近い値のインデックスを取得しますhIndex
。次に、新しいインデックスで割るか、新しいインデックスと getを使用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]