Primzahlen-Problem
lima-city → Forum → Programmiersprachen → C/C++ und D
anzahl
aufgabe
beitrag
bekannteste methode
borland
datei
ebenfall
hilfe
kleines schulprojekt
main
pas
pascal
portier
primzahl
sender
sieb
term
vielen dank
warten
zeug
-
Hi Leute
ich brauch mal dringend eure Hilfe f?r ein kleines Schulprojekt.
Hier die Aufgabe:
Aus den ersten 200 nat?rlichen Zahlen sollen die Primzahlen "herausgefiltert" und angezeigt werden.
vielen dank im vorraus
mfg athrubia
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die bekannteste Methode zur Primzahlberechnung ist das "Sieb des Eratosthenes".
http://de.wikipedia.org/wiki/Primzahltest#Sieb_des_Eratosthenes
Allerdings musst du den Code nach C selbst portieren. Das d?rfte aber nicht schwer sein. -
ich hab das ganze mal vor kurzem mit delphi gemacht.. auch nach diesem eratosthenes prinzip.. wenn du m?chtest schicke ich dir den code.. du musst ihn dir dann nur noch in c/c++ ?berstetzen.. mit dem prog kannst du soviele primzahlen erechnen wie du willst.. nur ab 1mio wird er seeeehhhhhhhrrrrrrr langsam^^
greez
gero
p.s. schick mir ne pn wenn dus haben willst -
Kommentare sollten alles erkl?ren
#include <stdio.h>
#define SEARCH_END 200
int main(void)
{
unsigned short int usNumber; // aktuelle Zahl
unsigned short int usNumberCount; // Anzahl der zu ?berpr?fenden Zahlen
bool bPrintIt;
printf("2\n"); // 2 ist die einzige gerade und erste Primzahl
usNumber = 3;
// Anzahl der ungerdaden Zahlen ab 3 bis SEARCH_END bestimmen
usNumberCount = SEARCH_END / 2 - 1;
// Falls SEARCH_END ungerade ist, ist usNumberCount 1 zu klein
if (SEARCH_END % 2)
usNumberCount++;
for (int iMain = 0; iMain < usNumberCount; iMain++)
{
bPrintIt = true;
usNumber = iMain * 2 + 3; // nur ungerade Zahlen ab 3 untersuchen
// Diese Schleife wird beim ersten Mal nicht durchlaufen,
// da iMain * 2 + 3 => 0 * 2 + 3 = 3 und i ebenfalls 3
for (int i = 3; i < usNumber; i++)
{
if ((usNumber % i) == 0) // kein Rest, Zahl ist also teilbar
{
bPrintIt = false;
// n?chstes printf nur zur Kontrolle, sonst auskommentieren
printf("%u teilbar durch %i\n", usNumber, i);
break;
}
}
if (bPrintIt)
printf("%i\n", usNumber);
}
return 0;
}
p.s.:
Hab den Link von alopex mal angeschaut. Scheint das gleiche Verfahren zu sein bis auf das Auslassen von geraden Zahlen.
p.s.2: Um gr?ssere Zahlen zu untersuchen m?ssen die Typen ge?ndert werden. Das hier funktioniert nur bis 2 hoch 16 (ca. 65.000).
Beitrag ge?ndert am 5.01.2006 14:23 von 0-checka
Mir ist nochwas eingefallen:
Man kann das nochmals optimieren, wenn man auch bei der Variable i die geraden Zahlen ?berspringt, denn ungerade Zahlen lassen sich nicht durch gerade teilen. Beweis:
Definition ungerade Zahl = Zahlen die nicht ohne Rest durch 2 teilbar sind
x = ungerade Zahl
y = irgendeine gerade Zahl
x / y <=> x / 2 * (y / 2)
Da x / 2 keine ganzzahlige L?sung hat ist der Term im Bereich der Zahlen ?ber N nicht aufl?sbar.
Beitrag ge?ndert am 5.01.2006 14:34 von 0-checka -
und funzt das prog?? das m?sste wie gesagt bis unendlich laufen k?nnen.. nur das du unnormal lange warten musst^^.. also wenn du ?ber 1mio gehst^^.. du kannst aber in dem edit feld die anzahl begrenzen..
greez
gero
p.s. poste mal plz ob dus ?bersezt bekommen hast und schick am besten direkt den code mit.. aslo wenns standart c/c++ sein sollte -
@gero:
ja ich hab das programm bekommen und es funzt auch einwandfrei, aber wie komm ich an den Code? -
der steht in der datei unit1.pas
aber ich empfehle dir den borland delphi7.0 oder spo runterzuladen.. damit kannst du dann das ganze projekt ?ffnen..
vom code her kannst du in der unit1.pas alles bis procedure TForm1.Button1Click(Sender: TObject); ignorieren.. das ist nur borland pascal/delphie zeugs was du so garnet brauchst..
greez
gero -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage