C :: Aufgabe #46

2 Lösungen Lösungen öffentlich

Alle Primzahlen bis zu einem Maximalwert ermitteln

Anfänger - C von devnull - 26.02.2014 um 18:36 Uhr
Es soll ein Programm geschrieben werden, welches alle Primzahlen im Bereich von 2 bis zu einem Maximalwert sucht und auf der Konsole ausgibt.
Den Maximalwert soll der Benutzer beim Programmaufruf auf der Kommandozeile angeben können.
Der Algorithmus zur Primzahlensuche ist frei wählbar.

Lösungen:

vote_ok
von devnull (8870 Punkte) - 01.03.2014 um 14:09 Uhr
Der Maximalwert wird aus argv[1] gelesen, ohne numerische Eingabeprüfung.
Defaultwert ist 100. Absoluter Maximalwert ist 1000000 (Array-Limit).
Quellcode ausblenden C-Code
/*************************
 * prime.c  Siebmethode
 * devnull  01-03-2014
 *************************/
#include <stdio.h>
#include <stdlib.h>

#define PRIME 1        // Marke Primzahl
#define NOPRIME 0      // Marke Nicht-Primzahl
#define MAX 1000000    // Array Limit

int numbers[MAX+1];
int max_num;

void set_mult_of_prime(int);
int get_next_prime(int);


int main(int argc, char **argv) {
    int next_prime;
    int i;

	max_num = (argc==2) ? atoi(argv[1]) : 100;
	if (max_num > MAX) max_num = MAX;
		
	/* alle Zahlen als PRIME markieren */
    for (i=0; i <= max_num; i++)
        numbers[i] = PRIME;
    numbers[1] = numbers[0] = NOPRIME;    

	/* Schleife bis max_num */
    next_prime = 2;
    do {
        set_mult_of_prime(next_prime);
        next_prime = get_next_prime(next_prime);
    } while (next_prime <= max_num);

    /* Ergebnis auf stdout */
    printf("Primzahlen bis %d:\n", max_num);
    for (i=0; i <= max_num; i++)
        if (numbers[i] == PRIME)
            printf("%d ", i);
    printf("\n");
	return 0;
}

/* alle Vielfache von n auf NOPRIME setzen */
void set_mult_of_prime(int n) {
int m;
    m = n << 1;
    while(m <= max_num) {
        numbers[m] = NOPRIME;
        m += n;
    }
}

/* naechste Primzahl nach n (Marke PRIME) */
int get_next_prime(int n) {
    while(++n <= max_num && numbers[n] == NOPRIME)
        ;
    return n;
}
vote_ok
von kathleenw (3600 Punkte) - 01.07.2020 um 09:05 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <stdbool.h>

bool istPrim(int zahl);

int main(void)
{
    int obere_grenze, i, anzahl;
    
    anzahl = 0;
    
    printf("Bis zu welchen Maximalwert sollen Primzahlen geuscht werden?: ");
    scanf("%d", &obere_grenze);
    
    for (i=2;i<=obere_grenze;i++){
        if (istPrim(i)==true) {
            printf("%d ",i);
            anzahl++;
        }
    }
    
    printf("\nVon 2 bis %d gibt es %d Primzahlen. \n", obere_grenze,anzahl);
        
}


//prüfen ob es eine Primzahl ist
bool istPrim(int zahl) {
    bool prim, faktorgefunden;
    int t;
    
    if (zahl <= 2) {
        if (zahl < 2)
            prim = false;
        else
            prim = true;
    }
    else {
        if (zahl%2 == 0)
            faktorgefunden = true;
        else {
            faktorgefunden = false;
            t = 3;
            while (t*t <= zahl && faktorgefunden == false) {
                if (zahl % t == 0)
                    faktorgefunden = true;
                else
                    t=t+2;
            }
        }
    }
    
    if (faktorgefunden==false)
        prim = true;
    else
        prim = false;
    
    return prim;
}
2096534

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.