Forum: PC-Programmierung Sieb des Eratosthenes mit C


von Kevin (Gast)


Lesenswert?

Hallo,

ich habe die letzte Zeit ein wenig C programmiert und dabei stellte ich 
mir die Frage einer Primzahlenerkennung.

Diese habe ich anschließend mittels C programmiert nach dem Prinzip des 
Eratosthenes.

Ich möchte alle Primzahlen zwischen 0 und 99 angegeben bekommen.

Wenn ich mein Programm nun im cmd starte, kommen alle Primzahlen bis 97 
(das stimmt auch) und anschließend kommt das Problem, dass das Programm 
nicht mehr funktionieren würde.

Wenn ich jedoch nur die Zahlen zwischen 0 und 49 ermittlen möchte 
funktioniert mein Programm einwandfrei.

Code:
1
#include <stdio.h>
2
3
#define TRUE 1
4
#define FALSE 0
5
#define MAX_ZAHL 100 /* die Zahlen zwischen 0 und 99 */
6
7
void primzahlenErkennen(char* values); /* forward declaration */
8
9
int main(int argc, char* argv[]){
10
  char values[MAX_ZAHL];
11
  int i = 0;
12
13
  for(i = 0; i < MAX_ZAHL; i++){
14
    values[i] = TRUE;
15
  }
16
17
  i = 0;
18
19
  primzahlenErkennen(values);
20
21
  for(i = 0; i < MAX_ZAHL; i++){
22
    if(values[i] == TRUE){
23
      printf("%d\n", i);
24
    }
25
  }
26
27
  return 0;
28
}
29
30
void primzahlenErkennen(char* values){
31
  int i = 2;
32
  int j;
33
34
  for(i = 2; i < MAX_ZAHL; i++){
35
    if(values[i] == TRUE){
36
      j = i; /*wenn es eine Primzahl ist, sind alle vielfachen keine */
37
      while(j < MAX_ZAHL){
38
        j = j + i;
39
        values[j] = FALSE;
40
      }
41
    }
42
  }
43
}

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Kevin schrieb:
> while(j < MAX_ZAHL){
>         j = j + i;

Müßte hier wohl eher
1
 while(j+i < MAX_ZAHL){
 heißen sosnt schreibst du über die Arraygrenzen hinaus...

von Kevin (Gast)


Lesenswert?

Danke, dass habe ich total übersehen aber ist logisch :D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.