Wie programmiere ich einen Primzahlenrechner?

MipiPann  14.10.2023, 13:55

Es gibt keine Formel Primzahlen du errechnen (Einstieg wäre die Riemannsche Vermutung).

Ausser du meinst ein Programm welches schaut ob eine Zahl eine PZ ist das geht einfach

stfelix 
Fragesteller
 14.10.2023, 14:11

genau es geht darum eine Zahl zu überprüfen

4 Antworten

int main(void)

{

 int primzahl=1;

 int dividable;

 int skip=0;

 while ( primzahl<1000000)

 {

 skip=1;

  dividable=(primzahl-1);

 while ( dividable>1){

 if ( primzahl%dividable==0 ) skip=0; dividable-=1;}  

  if ( skip==1) printf("%d\n",primzahl);

  primzahl+=1;

 }

/* doublet type cast geht?!?!?! (wollte es erst noch mit Festkomma-Multiplikation zuvor versuchen, ergab aber irgendwie nur 1 statt 0 nach Division?!)*/

}

scheint zu gehen? es gibt und nicht nur gäbe noch schnellere Algorithmen, vielleicht, indem man rekursiv (verworfene?) Ergebnisse miteinander durchmultiplizierte?! weiß auch nicht, warum der Compiler bei der Festkommaarithmetik scheinbar float mit streikte?! eine Division gibt da stets ein float zurück oder nicht?!

Festkommaarithmetik wäre Integer-Werte vor Division hochmultiplizieren und danach entsprechend runtermultiplizieren, aber mit einer automatischen float-Konvertierung kann man mit einem Ergebnis von 0 auch kaum noch mit fabs()-Betrag prüfen, und das mit floats ist und wäre eh Verschwendung von Rechenleistung, ob es direkt ganzzahlig aufginge?!

Woher ich das weiß:eigene Erfahrung

Das ist ja wohl mal innerhalb von 5 Minuten programmiert. Modulo operator in einer schleife hilft hier. if(eingabe % testzahl == 0 ){...} // ist keine primzahl


stfelix 
Fragesteller
 14.10.2023, 14:58

was ist in diesem fall die eingabe und was ist die Testzahl?

0
KloseGlott  14.10.2023, 15:04
@stfelix
eingabe = 41            
for (testzahl = 2; testzahl < eingabe; testzahl++) {
   if (eingabe % testzahl == 0) {
      //ich bin KEINE primzahl weil ich durch testzahl teilbar bin
      break;
   }
}
0
stfelix 
Fragesteller
 14.10.2023, 15:00

Ich verstehe diese Schritte nicht. Wenn 5%5 = 0 dann keine Primzahl. Aber 5 ist eine Primzahl.

0
stfelix 
Fragesteller
 14.10.2023, 15:06
@KloseGlott

Okay nun ist aber nicht jede Zahl die nicht durch zwei teilbar ist eine Primzahl

0
KloseGlott  14.10.2023, 15:07
@stfelix

Wird im Skript geprüft ob die eingabe durch eine testzahl teilbar ist mit restwert 0

0
stfelix 
Fragesteller
 14.10.2023, 15:14
@KloseGlott

Was ich meine ist: Wenn der Rest nicht Null ist dann ist es ja laut dem Programm eine Primzahl. Der Rest von 133/2 ist nicht gleich Null. 133 ist aber trotzdem keine Primzahl.

0
KloseGlott  14.10.2023, 15:32
@stfelix

133 ist durch 7 teilbar, also kommt rest 0 raus (133 % 7) ! Somit keine Primzahl wie es oben im Skript steht!!!!

0

Willst du schnell große Anzahlen an Primzahlen ermitteln, ist dies recht aufwändig. Aber einfache Algorithmen gibt es ebenfalls. Hervorzuheben wäre da das Primzahlensieb, zu googlen under "Sieb des Eratosthenes". Im Prinzip ein bit-array, in dem du ganzzahlige Vielfache jeder nächsten ermittelten Primzahl bis zum Arrayende als nicht-prim markierst.