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


Anmelden zum Antworten