0

n入力としての要素と、要素を含むグリッドの寸法を計算する関数がmake_grid(n)あります。とするとn = 12、関数は、幅が 4 で高さが 3 であり、1 や 12 などではないことを計算する必要があります。同様に、n = 246 と 4 を返す必要があります。

私はceil(sqrt(n))1 つの次元を取得するために使用しようとしましたが、一般的なケースではなく、ケース (n 偶数) で遊んでもうまくいきませsqrt(n) == ceil(sqrt(n))んでした。

編集: n 要素とその比率の特定の範囲を持つテーブルの最適な列と行のサイズを見つける 既にこの質問を見ていますが、コーディングは n = 24 次元 5 と 5 で私をスローします。何か助けはありますか?

4

3 に答える 3

1

割り切れる数を探しているnので、 の因数を計算し、nに最も近い 2 つを取る必要がありますsqrt(n)。1 つは以下の最大因数sqrt(n)(これを呼び出すf) であり、もう 1 つは ですn/f

ただし、多くの数 (74 などの素数) では奇妙に見えるグリッドが表示されます。

于 2013-06-03T23:41:24.657 に答える
1

整数因数分解アルゴリズムを探しています。

ここを確認してください:数値のすべての約数を効率的に見つける

そしてここ: http://en.wikipedia.org/wiki/Integer_factorization#Factoring_algorithms

次に、目標に最も適した要因のペアを選択します。

于 2013-06-03T23:42:12.573 に答える
0

アプローチは次のとおりです。

n関数の入力として整数を取ります。目標は、「最も正方形」のテーブルを取得することです。@John が示唆しsqrt(n)たように、寸法を把握するには計算する必要があります。一方n、 に最も近い約数を選択するには、のすべての約数を計算する必要がありますsqrt(n)

最も近い低い値を選択するにはどうすればよいでしょうか? このヒント (Python) を使用できます:完全にソートされていないリスト内の値に最も近い項目のインデックスを見つけ、除数のリスト内の最も近い値のインデックスを取得しますhIndex。次に、新しいインデックスで割るか、新しいインデックスと getを使用nして、他の次元を計算できます。divisors[hIndex]wIndex = hIndex + 1divisors[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]
于 2013-06-04T03:43:38.457 に答える