Primzahlen

hallo leute,
ich hab n kleines problem… ich soll für dich schule mit Borland ein programm schreiben welches mir die primzahlen bis zu einer gewissen zahl ausgibt. Vorgaben sind das das alles mit arrays gemacht werden soll. In dem Array sagen wir mal es geht bis tausend soll dann jedes 2te auf null gesetzt werden dann jedes dritte, jedes 5te usw… bis halt nur noch die primzahlen da sind… aber mir fällt da noch keine richtige lösung ein bitte um hilfe

mfg paddy

Hallo Leut’.

hallo leute,
ich hab n kleines problem… ich soll für dich schule mit
Borland ein programm schreiben welches mir die primzahlen bis
zu einer gewissen zahl ausgibt.

Reine Konsolenprogrammierung und es fehlt der Algorithmus ?
Dann kann das hier evtl. weiterhelfen: http://www.programmersheaven.com/c/MsgBoard/read.asp…
(programmersheaven.com - suche nach prime)

HTH
mfg M.L.

Reine Konsolenprogrammierung und es fehlt der Algorithmus ?
Dann kann das hier evtl. weiterhelfen:
http://www.programmersheaven.com/c/MsgBoard/read.asp…
(programmersheaven.com - suche nach prime)

HTH
mfg M.L.

Das hilft mir nur um meine gedanken ein bisschen zu sortieren wie man es genau macht aber mein problem löst es noch nicht ganz ich soll es ja nach nem prinzip machen mit arrays also gehen wir mal davon aus wir wollen alle primzahlen bis 500 wissen also a[500] und jez soll jedes 2te auf null gesetzt werden, da dann alles zaheln die durch 2 teibar sind schonmal weg sind, dann des selbe mit der drei, dann soll er die 4 auslassen weil dir die ja schon im schritt zuvor durch 2 geteilbt haben und somit null ist naja vielleicht kann mir jemand helfen danke

Hallo Patrick,

Wenn ich Dich richtig verstanden habe, machst Du zuerst ein Array der gewünschten Grösse, mit alle Einträge ungleich Null. Dann setzt Du den ersten Eintrag auf 0.
Jetzt rufst Du wiederholt folgende Schleife auf:

  • Suche ersten Eintrag ungleich Null
  • Dieser Eintrag bleibt unverändert. Alle ganzzahligen Vielfache werden auf 0 gesetzt.

Diese Schleife wiederholst Du solange, bis Du im ersten Schritt bei der Wurzel der Array-Grösse angelangt bist.

HTH,
Pürsti

P.S.: Es ist für die Lesbarkeit hilfreich, ab und zu einen Punkt zu setzen. Auch ist die Gross-/Kleinschreibung nicht zu verachten.

ich meine es so, dass ich die array spanne bestimme mit a[500]. als nächstes fülle ich jedes array mit den zahlen 1 bis 500. jetzt will ich jede 2te zahl aus dem array haben und durch null ersetzen also praktisch gesehen alle zahlen die durch 2 teilbar sind raushauen. Des selbe brauch ich dann für die 3 die 5 die 7 bis 250 halt.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Patrick,

Wenn ich Dich richtig verstanden habe, machst Du zuerst ein
Array der gewünschten Grösse, mit alle Einträge ungleich Null.
Dann setzt Du den ersten Eintrag auf 0.
Jetzt rufst Du wiederholt folgende Schleife auf:

  • Suche ersten Eintrag ungleich Null
  • Dieser Eintrag bleibt unverändert. Alle ganzzahligen
    Vielfache werden auf 0 gesetzt.

Diese Schleife wiederholst Du solange, bis Du im ersten
Schritt bei der Wurzel der Array-Grösse angelangt bist.

ich meine es so, dass ich die array spanne bestimme mit
a[500]. als nächstes fülle ich jedes array mit den zahlen 1
bis 500.

Soweit ok.

jetzt will ich jede 2te zahl aus dem array haben und
durch null ersetzen also praktisch gesehen alle zahlen die
durch 2 teilbar sind raushauen.

Auf diese Art und Weise sind alle geraden Zahlen weg - auch die 2.

Ich versuche, meinen oben vorgeschlagenen Algorithmus genauer zu erklären:

  1. Du setzt die 1 auf 0 (da 1 keine Primzahl)
  2. Du suchst die nächste Zahl ungleich 0.
  3. Du findest die 2.
  4. Du lässt die 2 unberührt und setzt alle Vielfachen (4,6,8,10,12,14,…,500) auf 0.
  5. Du suchst die nächst Zahl ungleich 0.
  6. Du findest die 3.
  7. Du lässt die 3 unberührt und setzt alle Vielfachen (9,15,21,27,…,495) auf 0.
  8. Du suchst die nächst Zahl ungleich 0.
  9. Du findest die 5.
  10. Du lässt die 5 unberührt und setzt alle Vielfachen (25,35,55,…,485) auf 0.
  11. Du suchst die nächst Zahl ungleich 0.
  12. Du findest die 7.
  13. Du lässt die 7 unberührt und setzt alle Vielfachen (49,77,91,…) auf 0.
  14. Du suchst die nächst Zahl ungleich 0.
  15. Du findest die 11.
  16. Du lässt die 11 unberührt und setzt alle Vielfachen (121,143,187,…) auf 0.
  17. Du suchst die nächst Zahl ungleich 0.
  18. Du findest die 13.
  19. Du lässt die 13 unberührt und setzt alle Vielfachen (169,221,299,…) auf 0.
  20. Du suchst die nächst Zahl ungleich 0.
  21. Du findest die 17.
  22. Du lässt die 17 unberührt und setzt alle Vielfachen (289,323,391,493) auf 0.
  23. Du suchst die nächst Zahl ungleich 0.
  24. Du findest die 19.
  25. Du lässt die 19 unberührt und setzt alle Vielfachen (361,437) auf 0.
  26. Du suchst die nächst Zahl ungleich 0.
  27. Du findest die 23.
  28. Da 23 grösser als die Quadratwurzel von 500 ist, beendest Du hier
    die Suche.

HTH,
Pürsti

ja genau so wollte ich das machen :smile: ich weiß nur noch nicht genau wie ich das anstellen soll ich kann mir des nicht so ganz vorstellen wie das in c++ gehen soll mit der 2 unberührt lassen und mein versuche jede 2te zahl auf 0 zusetzen ham auch nicht wirklich funktioniert.
2tens weiß ich nicht genau wie ich es bewerkstelligen soll das die zahlen 1 bis 500 in den arrays stehn mit dem befehl int a[500] bestimmte ich ja nur 500 arrays aber die sind nicht gefüllt und ich kenne dur die methode a[500]={1,2,3,4,…,500} aber da müsste ich ja alle zahlen eingeben das is n bisschen viel. und mit variablen hab ich des auch nicht hinbekommen naja vielleicht könnte ihr mir ja helfen
danke für die hilfe bis jetzt

mfg paddy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo paddy,

Dein Problem schein darin zu liegen, dass du nicht in C programmieren kannst, also solltest du dich erst einmal etwas mit dieser Programmiersprache beschäftigen.
Eigentlich sollte es doch ein Handbuch zu C geben …

ja genau so wollte ich das machen :smile: ich weiß nur noch nicht
genau wie ich das anstellen soll ich kann mir des nicht so
ganz vorstellen wie das in c++ gehen soll mit der 2 unberührt
lassen und mein versuche jede 2te zahl auf 0 zusetzen ham auch
nicht wirklich funktioniert.

2tens weiß ich nicht genau wie ich es bewerkstelligen soll das
die zahlen 1 bis 500 in den arrays stehn mit dem befehl int
a[500] bestimmte ich ja nur 500 arrays aber die sind nicht
gefüllt

Du definierst nur ein Arry mit 500 Elementen !!
Das ist jetzt einmal ganz unabhängig von der Programmiersprache !

und ich kenne dur die methode a[500]={1,2,3,4,…,500}
aber da müsste ich ja alle zahlen eingeben das is n bisschen
viel. und mit variablen hab ich des auch nicht hinbekommen
naja vielleicht könnte ihr mir ja helfen

int a[500];

void init\_a(void)
{
 int i;
 for ( i = 0; i 


> danke für die hilfe bis jetzt


Allerdings hat diese Lösung noch ein paar Laufzeit-Nachteile:
1. int ist je nach Compiler und CPU 16, 32 oder 64 Bit gross, dein Array benötigt also unter umständen viel Speicherplatz.
2. a[0] = 1 ist un schön, da du dabei immer die +1 in deinem Code hast, insofern wäre a[0] = 0, a[1] = 1 optimaler.
3. Wenn wird dann schon soweit sind, macht es keinen Sinn z.B. a[121] = 121 zu schreiben, du willst ja nur wissen ob 121 eine Primzahl ist oder nicht und dazu benötigst du eigentlich nur ein Bit !!
Also kannst du du das Ganze anders lösen:


    
    #define TRUE 1
    #define FALSE 0
    
    char a[500];
    
    void init\_a(void)
    {
     int i;
     for ( i = 0; i 
    
    Wenn du dann die entsprechenden Einträge, nach den Regeln, auf FALSE gesetzt hast genügt dann die Abfrage:
    if ( a[121] == TRUE ) ......
    um zu sehen ob dieser Wert eine Primzahl ist:
    
    
    
        
         for ( i = 0; i 
        in C entspricht 
        if ( a[i] ) 
        if ( a[i] != 0 ) 
        
        MfG Peter(TOO)

Hallo Patrick,

Ich dachte, dass Du nur ein Verständisproblem bezügl. Algorithmus hast. Leider habe ich nicht viel Zeit, um Dir eine Einführung in die Programmierung zu geben. Aber vielleicht hilft Dir das ein wenig weiter:

2tens weiß ich nicht genau wie ich es bewerkstelligen soll das
die zahlen 1 bis 500 in den arrays stehn mit dem befehl int
a[500] bestimmte ich ja nur 500 arrays aber die sind nicht
gefüllt und ich kenne dur die methode a[500]={1,2,3,4,…,500}
aber da müsste ich ja alle zahlen eingeben das is n bisschen
viel.

int a[500];

for( int i=0; i 



> ja genau so wollte ich das machen :smile: ich weiß nur noch nicht  
> genau wie ich das anstellen soll ich kann mir des nicht so  
> ganz vorstellen wie das in c++ gehen soll mit der 2 unberührt  
> lassen und mein versuche jede 2te zahl auf 0 zusetzen ham auch  
> nicht wirklich funktioniert.



    
    a[0] = 0; //1 ist keine Primzahl
    
    int nCount;
    int nValue;
    int nIndex;
    
    for( int i = 0; i 
    
    Ich verzichtete absichtlich auf jegliche Kürzungen, um es so anschaulich wie möglich zu machen.
    
    Mfg,
    Pürsti

mögliche lösung: (du scheinst das prinzip ja verstanden zu haben…)

#include

static const int N = 1000;
int main()
{
int i, a[N];
for(i = 2; i [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Stephan,

mögliche lösung: (du scheinst das prinzip ja verstanden zu
(ungetestet)

funktioniert im Prinzip :wink:

#include
static const int N = 1000;
int main()
{

(getestet und formatiert :wink:

/\* finde primzahlen durch simplen array-durchlauf 
der faktoren \*/

 #include 
 #include 
 
 #define ANZAHL 1000
 int Zahlen[ANZAHL];
 
 int findnumbers(int zahlen[], int size)
{
 int low=2, high=size/low;
 
 for(int i=low; iGrüße

CMБ