Primzahlen!

mamarulez

Mitglied
Hallo,

ich will ein Programm schreiben, was alle Primzahlen von X bis Y schreibt.

So sieht es bis jetzt aus:

Code:
// +++++++++++++++++++++++++++++++++++++++++++ //
// + PRIMZAHLEN                              + //
// +                                         + //
// + Autor: Jan Simon   DATUM: 22.12.2003    + //
// +++++++++++++++++++++++++++++++++++++++++++ //

// HEADER

#include <iostream.h>
#include <math.h>

// FUNKTIONEN

bool IstZahlGerade ( int Zahl )
{
	if ( Zahl % 2 == 0 )
		return true;
	else 
		return false;
}

void ZahlAuflisten ( int Zahl )
{
	cout <<Zahl<<"\n";
}

void AufPrimzahlTesten ( int Startwert, int Endwert )
{									
	int AktuelleZahl;

	//Von "Startwert" bis "Endwert" checken ob die "AktuelleZahl" eine Primzahl ist oder nicht!
	for		( AktuelleZahl = Startwert; AktuelleZahl < Endwert; AktuelleZahl++ )			
	{	
		// Nur wenn "AktuelleZahl" ungerade ist, dann wird wird mit ihr weitergearbeitet!
		if ( IstZahlGerade ( AktuelleZahl ) == false )
		{
			int ErsterAktuellerTeiler;
			int ZweiterAktuellerTeiler;

			// Jetzt müssen wir für jede "AktuelleZahl" alle möglichen Teiler ausfindig machen!
			// Also immer von 2 bis zu "AktuelleZahl" jede Zahl durchgehen und schauen ob sie ein Teiler ist!
			for ( ErsterAktuellerTeiler = 2; ErsterAktuellerTeiler < AktuelleZahl; ErsterAktuellerTeiler++ )
			{
				// So - jetzt nehmen wir einfach den "ZweiterAktuellerTeiler" dazu und multiplizieren so jede
				// natürliche, positive Zahl von 2 bis "AktuelleZahl" mit jeder natürlichen, positiven Zahl
				// von 2 bis "AktuelleZahl"
				for ( ZweiterAktuellerTeiler = 2; ZweiterAktuellerTeiler < AktuelleZahl; ZweiterAktuellerTeiler++ )
				{
					// Wenn "ErsterAktuellerTeiler" mal "ZweiterAktuellerTeiler" zusammen nicht "AktuelleZahl"
					// ergibt, dann wird 
					if ( ErsterAktuellerTeiler * ZweiterAktuellerTeiler != AktuelleZahl )
			} 
		}
	}
}

// HAUPTSCHLEIFE

void main ( void )
{
	AufPrimzahlTesten ( 0, 100 );
}

Ich verlange nicht von euch, dass Ihr meine Hausaufgaben macht - aber vielleicht mir einen Denkanstoss geben, wie es weitergehen kann.

Im Moment komme ich einfach nicht weiter.

Nochmal zur Kommentierung des obigen Quelltextes (obwohl die ja eigentlich gut sein müßte): Also - es geht eigentlich nur um die Funktion "void AufPrimzahlTesten ( int Startwert, int Endwert )". So, da wird ersteinmal bei jeder Zahl zwischen "Startwert" und "Endwert" geguckt ob die gerade oder ungerade ist. Da Primzahlen immer ungerade sind wird auch nur mit ungeraden weitergerechnet. Der nächste Schritt ist dann zu schauen, ob die Zahl ("AktuelleZahl") einen positiven, natürlichen Teiler hat ausser der "1" und sich selbst. Und genau da komme ich nicht weiter!

Wenn Ihr Fragen zu dem Code da oben habt, dann schreibt mir bitte!

Danke schonmal im Vorraus!
 
moin


Ich würde dir ja vorschlagen die Suchfunktion zu benutzen! HIer findest du mehrere Beispiele an den du dich orientieren kannst.


mfg
umbrasaxum
 
Da ich auch grad am lernen bin, hab ich es auch mal versucht :)
Code:
#include <stdio.h>

int isPrime( int a_iNum );

int isPrime( int a_iNum )
{
    int i;
    for ( i=2; i<a_iNum; i++ ) {
        if ( a_iNum % i == 0 ) {
            return 0;
        }
    }
    
    return 1;
}

int main(int argc, char *argv[])
{
    if ( argc != 3 ) {
        printf( "Parameter: prime <start> <ende>" );
        return 0;
    }
    
    int i, j;
    long iStart = atoi( argv[1] ), iEnd   = atoi( argv[2] );
    
    if ( iEnd <= iStart ) {
        printf( "Ende kleiner oder gleich Start" );
        return 0;
    }

    for ( i=iStart; i<=iEnd; i++ ) {
        if ( i % 2 != 0 ) {
            if ( isPrime( i ) == 1 ) {
                printf( "%i ist eine Primzahl\n", i );
            }
        }
    }

    return 0;
}
 
Zurück