Sehr,Sehr grosser array, brauche alterntive
-
ich habe ein primzahlenprogramm, welches mit der siebformel arbeitet...dazu wird aber am anfang ein boolean array der grösse x erstellt, x ist die zahl bis zu der gesucht wird.
bool = 1 byte
-> prüfen bis 1 milliarde -> 1 gig ram verbraucht -> fast unmöglich
habt ihr eine idee, was für nen datentyp ich statt bool nehmen kann? am besten bräuchte ich nur 1 bit ( 1 oder 0 )
-
Du kannst ein Byte-Array nehmen und auf jedes Element 8 Bits packen:
//true, wenn Feld pos in arr gesetzt ist: #define test(arr,pos) ((arr[pos/8])&(1<<pos%8) != 0) //setzt Feld pos auf 1: #define set(arr,pos) ((arr[pos/8]&=(1<<pos%8)) //setzt Feld pos auf 0: #define unset(arr,pos) ((arr[pos/8]&=~(1<<pos%8)) BYTE array[n/8+1];
(in C++ kannst du dir den ganzen Aufwand sparen und verwendest einen vector<bool> (Template-Spezialisierung für 1-Bit-Werte).
-
danke!