2016-11-14 3 views
0

Mit einer Zahl 'n', die eine Potenz von 2 ist, wie kann ich effizient die beiden Faktoren finden, die einander am ehesten entsprechen? Mit anderen Worten, wenn ich ein lineares Array habe und es auf 2D abbilden möchte, wie kann ich die 2D-Dimensionen finden, die am ähnlichsten sind (Bildabmessungen, die einem Quadrat am nächsten kommen)?Die meisten äquivalenten Faktoren einer Zahl

Muss eine Art bitweises Verfahren sein, um dies schnell zu machen, anstatt über Faktoren hinwegzuschweifen.

+2

"n" ist darstellbar als "2^k" (da Sie sagen, es ist eine Potenz von 2). Wenn "k" gerade ist, dann gilt "n == 2^(k/2) · 2^(k/2)" (z. B. "16 == 4 · 4"). Wenn "k" ungerade ist, dann ist der nächste, den Sie bekommen können, 'n == 2^((k-1)/2) * 2^((k + 1)/2)' (zB '8 == 2 * 4') –

+0

Sie haben absolut Recht in Ihrem Verdacht. Nun müssen Sie nur noch darüber nachdenken, was "2 bis zur n-ten" Kraft mathematisch bedeutet, und mit dem "n", wie Sie eine Zahl finden, die, wenn sie mit sich selbst multipliziert wird, zu diesem "2^n" führt. Freier Hinweis: Das ist einfach, wenn "n" gerade ist. –

+0

Fantastisch! Bitte post als Antwort und ich werde akzeptieren. – user1043761

Antwort

2

n ist als 2^k darstellbar (da Sie sagen, es ist eine Macht von 2). Wenn k gerade ist, dann n == 2^(k/2) * 2^(k/2) (z. B. 16==4*4). Wenn k ungerade ist, dann ist n == 2^((k-1)/2) * 2^((k+1)/2) (z. B. 8==2*4)

Verwandte Themen