Schlagwort-Archive: Mathe

Primzahlzeitvertreib

Was macht ein Physikstudent, wenn er keine Lust hat, sich mit seinem Studium zu beschäftigen und ihm trotzdem langweilig ist?

Wahrscheinlich kann man das nicht so pauschal beantworten, jedoch habe ich mir gerade ein C-Programm geschrieben, welches mir alle Primzahlen bis zu einer bestimmten Zahl N berechnet und ausgibt. Zudem fand ich es noch interessant, zu überprüfen wie sich die Differenz zwischen zwei aufeinanderfolgenden Primzahlen und das Verhältnis zwischen Anzahl von Primzahlen zu normalen Zahlen verändert.

Schön fande ich vorallem, dass man einen exponentiellen Abfall bei dem Verhältnis bemerken konnten:

Verhältnis zwischen Anzahl von Primzahlen und anderen Zahlen

Verhältnis zwischen Anzahl von Primzahlen und anderen Zahlen

Die Differenz zwischen zwei aufeinanderfolgenden Primzahlen war da weniger aufschlussreich:

Differenz zwischen zwei aufeinanderfolgenden Primzahlen

Differenz zwischen zwei aufeinanderfolgenden Primzahlen

Für jeden, der selber einmal damit herumspielen will, hier der Programmcode, der einen alle Primzaheln bis 100000 ausgeben dürfte. Man sollte N vielleicht nicht zu groß wählen, denn das fordert den Rechner dann doch ganz schön.

#include <stdio.h>
#include <stdlib.h>

#define N 100000
#define windows

void clearScreen(){ //löscht das Ausgabefenster
 #if defined(windows)
 system("cls");
 #endif
 #if defined(linux)
 system("clear");
 #endif
}

int main(int argc, char *argv[]){

 long int prim1=1, prim2=1, n, i=1, check=1; 
 double pro, ratio;
 FILE *ausgabe=fopen("ausgabe.txt", "w"); //Ausgabedatei

 for(prim1=1; prim1<=N; prim1++){ //Primzahlschleife

  if(!(prim1%1000)){ //Fortschrittsberechnung
   pro = (double) prim1/N * 100;
   clearScreen();
 //Ausgabe des Fortschritts
   printf("Fortschritt:\t %.1f %%\n", pro); 
  }

  for(n=2; n<prim1; n++){ 
//Überprüfung ob die Zahl durch eine andere teilbar ist oder nicht
   if(!(prim1%n)) 
    check=0;    
  }

  if(check){
//Ist die Zahl eine Primzahl, wird sie nun ausgegeben
 fprintf(ausgabe,"%d\t%d\t%d\t%f\n",
   i, prim1, prim1-prim2, (double) i/prim1);
   i++;
   prim2=prim1;   
  }
  else check=1;
 } 

 fclose(ausgabe);
 return 0;
}