Advertisement
Guest User

Primzahlen

a guest
Dec 5th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. /*
  2.  * 0 = nicht durchgestrichen
  3.  * 1 = durchgestrichen
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <windows.h>
  9. #include <math.h>
  10. #include <time.h>
  11.  
  12. clock_t prgstart, prgende;
  13.  
  14. int main(){
  15.  
  16.     unsigned long int limit;
  17.     unsigned long int i=0, j=0;
  18.     unsigned long int anzahl=0;
  19.  
  20.     printf("Geben Sie das Limit ein!\n");   //Aufforderung zur Eingabe des Limits
  21.     scanf("%li", &limit);
  22.     system("cls");
  23.  
  24.     unsigned long int prim[limit+1];
  25.  
  26.     //Array mit limit+1 Zellen anlegen
  27.     //Da die Zelle von limit benötigt wird
  28.     //wird die Zellenzahl auf limit+1 gesetz
  29.     //unsigned long int prim[limit];
  30.     prgstart=clock();
  31.     for(i=2; i<=limit; i++){
  32.         prim[i]=0;                          //Alle Zahlen außer 0 und 1 auf nicht durchgestrichen setzen
  33.     }
  34.     prim[1]=1;                              //1 ist keine Primzahl und wird daher durchgestrichen
  35.     i=2;                                    //2 ist die kleinste Primzahl weshalb i auf 2 gesetzt wird
  36.  
  37.     while(i*i <= limit){
  38.         //Schleife wird solange wiederholt bis i^2 größer
  39.         //dem Limit ist.
  40.         if(prim[i]==0)                      //Falls i noch nicht durchgestrichen worden ist
  41.         {
  42.             j=i << 1;                       //j stellt nun das Vielfache von i dar
  43.             while(j<=limit){
  44.                 //Schleife wird wiederholt solange j
  45.                 //im Intervall von 1 bis limit ist
  46.                 prim[j]=1;                  //Das Vielfache wird gestrichen
  47.                 j+=i;                       //j wird auf den Wert des nächsten Vielfachen gesetzt
  48.             }
  49.         }
  50.         i++;                                //setze i auf den nächsten zu überpüfenden Wert
  51.     }
  52.     prgende=clock();
  53.  
  54.       for(i=2; i<=limit; i++){
  55.         if(prim[i]==0){
  56.                 anzahl++;
  57.                 printf("%lu\n", i);
  58.             }
  59.         }
  60.     printf("\n\nDie Rechenzeit betrug %.2f Mikrosekunden\n",
  61.       (float)((prgende-prgstart) / CLOCKS_PER_SEC));
  62.     printf("\n\n\n%lu Primzahlen im gewaehlten Bereich...", anzahl);
  63.  
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement