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 | }
|