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!


Anmelden zum Antworten