Das sieht eigentlich schon gut aus.
Was mir jedoch sofort auffällt ist, dass bei primzahlen(2) keine 2 ausgegeben wird, da du für die Bedingungen ende>2 verwendest.
Der Rest müsste aber vom Ansatz her hinkommen, da du für jede Zahl von 2 bis n überprüfst, ob sie durch eine Zahl, die nicht sie selbst oder 1 ist teilbar ist.
Was mir auffällt ist, dass nur gerade Zahlen "herausfallen" die 9 ist die erste Zahl, deren Ausschlusskriterium nicht die Teilbarkeit durch 2 ist.
Das legt die Vermutung nahe, dass der Fehler irgendwo bei Teiler liegt.
Es wird es so nicht Funktionieren, da die Zahl immer dann ausgibst, wenn sie nicht durch 2 teilbar ist, da du schon beim ersten Durchgang (also Teilbarkeit durch 2) entscheidest, ob ausgegeben wird oder nicht und die Schleife für den Teiler dann abbrichst.
Ich würde das gefragte Problem so lösen :
1.) Die Schleife für den Teiler nur dann abbrechen, wenn du eine Teilbarkeit festgestellt hast. Sonst weiterlaufen lassen.
2.) Die Zahl erst dann ausgeben, wenn die Schleife im Prinzip durch ist. (z.B. Erst im letzten Schleifendurchgang die Zahl ausgeben)
Ich hoffe ich konnte helfen :)