Primzahlenberechnung und co
-
hi, ich brauche bei einem Programm eine Primzahlenzerlegung und dafür dachte ich nehme ich die Probedivision, für die ich ja mal alle PRimzahlen bis zu einer gewissen zahl berechnen will und da stellt sich mir das Problem:
ich habe es auf zwei arten versucht, einmal in dem ich den fermat test ausnütze welcher besagt, dass 2^(n-1) mod n == 1 , dass die zahl nziemlich sicher eine Primzahl ist, oder das Sieb des Eratosthenes.
hier beide versuche, wäre nett wenn mir jd sagen könnte wo ich den fehler versteckt habe, weil ich echt net weiter komm:#include <stdio.h> #define LENGHT 100 int main() { unsigned counter = 0; unsigned myprimearray[LENGHT]; unsigned zaehler = 0; //indiziere my array for(counter; counter <= LENGHT; counter++) { myprimearray[counter] = counter + 1; printf("%d ", myprimearray[counter]); } printf("\n\n\n"); //------------------------------- //Berechne Primzahlen bis LENGHT myprimearray[0] = 0; // 1 ist keine Primzahl und deswegen setzte ich das Array an der stelle 0 auf 0 myprimearray[1] = 2; // 2 ist eine Primzahl daher bleibt die Zahl erhalten im Array //Kontrollausgabe for(counter = 0; counter <= LENGHT; counter++) { printf("%d ", myprimearray[counter]); } printf("\n\n\n"); //Lösche alle Vielfachen von 2 aus dem array for(counter = 2; counter <= LENGHT; counter++) { if( myprimearray[counter] % 2 == 0) { myprimearray[counter] = 0; } } //Kontrollausgabe for(counter = 0; counter <= LENGHT; counter++) { printf("%d ", myprimearray[counter]); } printf("\n\n\n"); for(counter = 2; counter <= LENGHT; counter++) { for(counter; counter <= LENGHT; counter++) { zaehler = myprimearray[counter]; // beim ersten durchgang ist zaehler 3 for(counter;counter <= LENGHT;counter++) { if( myprimearray[counter] % zaehler == 0) { myprimearray[counter] = 0; } } } } //Kontrollausgabe for(counter = 0; counter <= LENGHT; counter++) { printf("%d ", myprimearray[counter]); } printf("\n"); }
Fermat
#include <stdio.h> #include <stdlib.h> #include <math.h> #define LENGHT 20 int main() { unsigned counter = 0; double myprimearray[LENGHT]; unsigned number = 0; double lenght = LENGHT; double potenz = 0; //indiziere my array for(counter; counter <= LENGHT; counter++) { myprimearray[counter] = counter + 1; printf("%d ", myprimearray[counter]); } printf("\n\n\n"); myprimearray[0] = 0; // 1 ist keine Primzahl und deswegen setzte ich das Array an der stelle 0 auf 0 myprimearray[1] = 2; // 2 ist eine Primzahl daher bleibt die Zahl erhalten im Array potenz = pow(2, (lenght-1)); if( potenz % lenght != 1) // cast?????????? { printf(" Länge ist keine primzah\n"); } }
Vielen Dank schon mal fürs durchlesen
-
der fehler liegt bei den for-schleifen:
for(counter; counter <= LENGHT; counter++)
indexe beginnen bei 0, bei deinem array reicht der index also bis 99. mit counter < LENGTH (was 100 ist) wird bei letzten durchlauf der index 100 -> du greifst über die arraygrenzen hinaus -> programmabsturz.
so ist es richtig:
for(counter; counter < LENGHT; counter++)
mfg Gaste