Wpis z mikrobloga

@kemek: Tak to wiem ale np. jak mam tablice "boolean[] numbersTable = new boolean[n];" to też mi wywala błąd pomimo tego że n zadeklarowałem jako BigInteger
  • Odpowiedz
@pulla: Jako wielkość tablicy można podać tylko int.

A wiesz, że samo założenie tablicy intów o wielkości takiej jaką może mieć maksymalny int wymaga około 8GB ramu?

Do tak wielu booleanów musisz skorzystać z klasy BitSet, dzięki której możesz włączać, wyłączać i pobierać poszczególne bity (booleany). Ale nadal ich pozycje są numerowane intami.
  • Odpowiedz
@pulla: Najlepiej napisz, co chcesz zrobić za pomocą tej tablicy, a nie próbujesz w jakiś dziwny sposób rozwiązać bliżej nieokreślony problem.
  • Odpowiedz
@kemek: Wiesz chodzi o to że miałem http://pastebin.com/5iNZB5Pz taki kod, który mi obliczał czynniki pierwsze podanej liczby, ale że chce uruchomić ten cały kod dla bardzo dużej liczby pytałem o te wszystkie metody związane z BigInteger, bo jestem dopiero początkujący jeśli chodzi jave.
  • Odpowiedz
@pulla: Nie wiem, jak wielka to liczba, ale już w longu Ci się zmieszczą takie liczby, dla których obliczanie tego algorytmu będzie za długie. ;)

Tylko znowu co z indeksowaniem tablic i BitSetu przez inty? :>

Możesz na podstawie istniejącego BitSetu napisać własny - indeksujący po longu - będziesz mógł tam zmieścić 2^31 (ograniczenie indeksowania po incie)*64 (liczba bitów w longu) bity, czyli 2^37, czyli 137,438,953,472 wartości logiczne, które zajmą
  • Odpowiedz
@pulla: Hmm, w sumie nie trzeba się ograniczać do "tylko" 2^37 wartości.

Można nawet korzystając z istniejącego BitSeta - stworzyć tablicę BitSetów. Jeśli szukamy liczby n (typu long) od 0 do (2^31)-1, to zaglądamy do BitSetu z indeksem 0 (w tablicy BitSetów) pod indeks n, jeśli od (2^31)-1 do 2x[(2^31)-1], to do BitSeta z indeksem 1 (w tablicy BitSetów) pod indeks n - (2^31)-1 i tak dalej.

Co do granic
  • Odpowiedz