#include #include #include #include char Eingabewert; /*---------------------------------------------------------------------------*/ /* Funktion gibt den Speicher fuer das dynamische Feld frei und uebergibt */ /* diesen als unsigned char*. */ /*---------------------------------------------------------------------------*/ unsigned char* Speicher(unsigned long w) { unsigned char *Feld; unsigned long g=0; /* Zeiger auf das feld bekommt w mal Speicher angefordert (8 Bit jeweils) */ Feld=(unsigned char*)malloc(sizeof(unsigned char)*w); /* Falls kein speicher vorhanden Abbruch */ if (Feld==NULL) { printf(" Kein Speicher mehr vorhanden!\n"); exit(0); } /* alle werte werden auf null gesetzt */ for(g=0;g<=w;g++) { Feld[g]=0; } return Feld; } /*---------------------------------------------------------------------------*/ /* Funktion dient zur eingabe des Wertes,der in die Primfaktoren zerlegt */ /* werden soll und gibt diesen wert als unsigned long zurueck. */ /*---------------------------------------------------------------------------*/ unsigned long eingabe() { unsigned long zahl; int i=1; while(i) { printf(" Bitte geben sie eine positive ganze Zahl ein,welche in Primfaktoren \n zerlegt werden soll: "); scanf("%s",&Eingabewert); zahl=atol(&Eingabewert); if((0=zahl))return zahl; /*Falls Zahl im Bereich 1-ULONG_MAX*/ printf("\n Grenzwerte: min:1 bis max:4294967295\n"); /*Ansonsten Ausgabe lieget nicht im Bereich*/ } return 0; } /*---------------------------------------------------------------------------*/ /* Funktion bestimmt die Primzahlen bis zu dem eingegebenen wert und legt */ /* ungeraden werte in einer Maske ab.Die ungeradenzahlen die keine Primzahlen*/ /* sind bekommen den Wert 1 zugeordnet (wahr). */ /*---------------------------------------------------------------------------*/ unsigned char* Primzahlbestimmung(unsigned long wert,unsigned char *Feld,unsigned char *Maske) { unsigned long i,a; for (i=3;i<=wert;i=(i+2)) { a=i; for(a=a+i;a<=wert;a=a+i) { if(a%2) { Feld[a/8] |= Maske[a%8]; } } } return Feld; }