Duża tablica typu long[]

Odpowiedz Nowy wątek
2011-10-12 11:23
0

Witam,
mam za zadanie napisać program, w którym będzie tablica typu long, przechowująca najmniejsze dzielniki z kolejnych liczb (poza 0 i 1). Jeżeli dana liczba jest liczbą pierwszą, to dana wartość w tablicy jest zerem. Tablica ma wyglądać tak:

tab[0] = 0; // pomijamy
tab[1] = 0; // pomijamy
tab[2] = 0; // liczba pierwsza
tab[3] = 0; // liczba pierwsza
tab[4] = 2; // najmniejszy dzielnik 4 to 2
tab[5] = 0; // liczba pierwsza
tab[6] = 2; // najmniejszy dzielnik 6 to 2
tab[7] = 0; // liczba pierwsza
tab[8] = 2; // najmniejszy dzielnik 8 to 2
tab[9] = 3; // najmniejszy dzielnik 9 to 3
//    itd....

Aby zadeklarować taką tablicę robię:

long[] tab = new long[granica];

z tym, że górna granica tablicy też ma wartość long. Jednak jako id klucza w tablicy trzeba podawać jako Integer.
Może mi ktoś wyjaśnić jak to obejść?
Pozdrawiam

Pozostało 580 znaków

2011-10-12 11:58
bo
0

To masz problem, indeks w tablicy musi być typu int. W chwilach wolnych oblicz sobie rozmiar tablicy typu long[Long.MAX_VALUE].

~68719476728 gigabajtów :) - Kerai 2011-10-12 12:14

Pozostało 580 znaków

2011-10-12 12:40
1

Maks tablica może mieć ok 2 mld elementów (ograniczenie inta). Przy 8 bajtach na longa daje to ok 16 gigabajtów. Masz więcej pamięci?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-10-12 13:00
1

Jak już wspomniano wątpliwe żebyś potrzebował indeksować longami, ale gdybyś jednak bardzo chciał to zamiast tablicy użyj sobie Map<Long,Long> i po kłopocie :P


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2011-10-13 21:42
1

Ponieważ tab[i] < i oraz i musi być intem (gdyż jest indeksem tablicy), więc nie ma potrzeby, aby tab było tablicą long[]. Wystarczy int[].

Jeżeli badałbyś liczby mniejsze niż 109, to ponieważ tab[i] <= sqrt(i), wystarczyłoby short[] zamiast int[] (sqrt(109) ~= 31622, a Short.MAX_VALUE = 32767).


Registered Linux user #456405 | SCJP 6 | SCWCD 5 | SCBCD 5
edytowany 2x, ostatnio: __krzysiek85, 2011-10-13 21:45
Trochę nie na temat, autor potrzebuje tablicy, w której indeks jest typu long. - bogdans 2011-10-14 15:07

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0