mal wieder Primzahlen



  • Spiel doch mal Deine for-Schleife von Hand durch. Entweder im Debugger oder mit Papier und Bleistift. Zum Beispiel anhand der 9. Die erkennt Dein Code nämlich auch fälschlicherweise als Primzahl. Vielleicht merkst Du ja schon beim Debuggen / Aufschreiben, wo was falsch läuft.



  • Primzahlen von 1 bis 100 und noch weitere

    2
    3
    5
    7
    9    ??
    11
    13
    15   ??
    17
    19
    21   ??
    23
    25   ??
    27   ??
    29
    31
    33   ??
    35   ??
    37
    39   ??
    41
    43
    45   ??
    47
    49   ??
    51   ??
    53
    55   ??
    57   ??
    59
    61
    63   ??
    65   ??
    67
    69   ??
    71
    73
    75   ??
    77   ??
    79
    81   ??
    83
    85   ??
    87   ??
    89
    91   ??
    93   ??
    95   ??
    97
    99
    

    In den letzten Wochen wurden viele Beispielcodes zum Thema Primzahlen gepostet. Nutze doch die Forensuche und vergleiche diese Codes mit deinem.

    Edit: Tipp: Das return 1; steht an der falschen Stelle.

    Edit2: ⚠ Du zählst zu weit! ⚠



  • wars dir zu anstrengend den code von isam2k mit deinem zu vergleichen?



  • @Vorposter:
    nein war es nicht und ich habs mehrmals gelesen...
    ich hatte bloß übrsehen dass der else-zweig fehlt...

    @SG1/ViciousFalcon
    argh...stimmt...es gibt ja noch mehrere nicht primzahlen bei denen ich nicht gemerkt habe dass sie dabei stehen...damn it...
    bins schon öfter im kopf durchgegangen aber ist wahrscheinlich wirklich mal notwendig das schritt für schritt aufzuschreiben bzw nen Debugger herunterzuladen...

    Danke schonmal für die hilfreichen Tips 😉
    👍 👍 👍



  • im übrigen würde Isam2k's Version auch nicht funktionieren...
    (tut sie auch cniht - hatte es schon probiert)

    und zwar weil man sich in diesem Teil

    else
    {
         for(int counter=2;counter<=number;++counter)
         {
            if((number%counter) == 0)
            {
               return 0;
            }
         }
         return 1;
    }
    

    das Zählen sparen könnte - dieser else-Zweig gibt ja immer 1 zurück



  • Vicious Falcon schrieb:

    Edit2: ⚠ Du zählst zu weit! ⚠

    Wie ist eine Primzahl definiert? Sie ist nur durch eins und sich selbst teilbar!
    Was gibt bspw. 37%37 zurück? Und wie reagierst du dann darauf?



  • Vicious Falcon schrieb:

    Wie ist eine Primzahl definiert? Sie ist nur durch eins und sich selbst teilbar!

    Nö. Eine Primzahl ist eine natürliche Zahl, welche durch genau zwei natürliche Zahlen teilbar ist.



  • Ja, gut, sie ist nur durch eins und sich selbst teilbar, wobei dies zwei verschiedene Zahlen sein müssen 🙄



  • wie ne primzahl definiert ist wusste ich noch 🙂
    hatte aber einen denkfehler was die Modulo-Funktion angeht...
    (ich dachte z.B. dass bei 77%7 77/7=11/7= ... und das hat da ja keinen sinn gemacht)

    hab mich dahingehend nochmal informiert und ich weiß es jetzt besser 🙂

    und:
    dank eurer Tips (SG1/ViciousFalcon) hab ich den Fehler gefunden und behoben 😃
    wenn ich das nächste mal nicht weiter komme werde ich gleich alles schriftlich durchgehen und nicht nur "durchdenken" 😛
    und das mit dem zu weit zählen ist mir dabei auch aufgefallen 🙂

    jetzt funktionierts einwandfrei...

    #include <stdio.h>
    
    int prim(int number)
    {	
    	int retval;                      //retval=returnvalue			
    	if (number<2)			
    	{
                retval=0;
            }
            else 
    	{
    		if (number==2) 		
    		{
    			retval=1;
    		}
    		else 
    		{
    			for(int counter=2;counter<number;++counter)	
    			{
    				if((number%counter)==0)
    				{
    					retval=0;
    					break;
    				}
    				else
    				{
    					retval=1;
    				}
    			}
    		}
    	}
    	return retval;
    }
    

    Also nochmal danke an alle, die sich die Zeit hierfür genommen haben
    👍 👍 👍



  • Vicious Falcon schrieb:

    Ja, gut, sie ist nur durch eins und sich selbst teilbar, wobei dies zwei verschiedene Zahlen sein müssen 🙄

    Ist vielleicht ein bisschen kleinlich, aber mein utopisches Ziel ist es, dass sich ne richtige Definition durchsetzt, damit man nicht jeder neuen Generation erklären muss, warum 1 keine Primzahl ist 🙂



  • Michael E. schrieb:

    Ist vielleicht ein bisschen kleinlich, aber mein utopisches Ziel ist es, dass sich ne richtige Definition durchsetzt, damit man nicht jeder neuen Generation erklären muss, warum 1 keine Primzahl ist 🙂

    Ja, okay, im Grunde isses ja richtig :).


Anmelden zum Antworten