Primzahlenprogramm
Übersicht

RPG-FanBetreff: Primzahlenprogramm |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hoffe ich bin hier richtig, sorry, aber ich finde mich hier noch nicht so zurecht.![]() Ich habe schon in verschiedenen Programmiersprachen programmiert, ich wollte ein Primzahlen Programm von der Programmiersprache C in Blitz Basic recoden. Aber irgendwas mache ich falsch. Ich bin mir nicht sicher, ob es den Befehl Rest errechnen gibt. Falls nicht, kann man den irgendwie in einer Function schreiben? Ansonsten habe ich noch einen mir klaren Fehler, nämlich expecting end of line. Hier mal der Quellcode: Code: [AUSKLAPPEN] zahl=0
Color(0,255,0) Text("PZP by RPG-Fan") zahl=Input("Zahl eingeben!") If zahl%2>0 And zahl%3>0 And zahl%5>0 And zahl%7>0 And zahl%11>0 And zahl%13>0 And zahl%17>0 And zahl<>0 Then Text("Ihre Zahl ist eine Primzahl!") EndIf If zahl=0 Then Text("Durch Null geht jede Zahl!") EndIf If zahl=1 Then Text("Die Zahl 1 hat nichts mit Primzahlen zu tun!") EndIf If zahl=2 Or zahl=3 Or zahl=5 Or zahl=7 Or zahl=11 Or zahl=13 Or zahl=17 Then Text("Ihre Zahl ist eine Primzahl!") Else Text("Ihre Zahl ist keine Primzahl!") WaitKey(*) End Vom zahl% nach If bis zu then habe ich den Fehler. Wenn ich die Zeile dort umbreche, gibt es gleich wieder einen Fehler: Expecting endif. Habe ich natürlich nicht vergessen, würde sich vielleicht beheben lassen, aber ich hätte nicht den Effekt, den ich haben wollte. Bitte helft mir! ![]() |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für den Rest zu errechnen kannst du modulo (ql:mod) nehmen....
Was ich an deinem Code nicht verstehe, was du mit dem "%n" erreichen willst.... Willst du damit den Rest ausrechnen?? - Dann wäre das aber keine Promzahl..... Ansonsten, das "Expecting ...." kommt davon, dass du endif vergessen hast..... Auch Waitkey hast du noch ein bisschen falsch angewendet..... ![]() Was nicht schlecht wäre, wenn du den Code noch ein bisschen einrücken würdest.... Zitat: zahl=0 Color(0,255,0) Text("PZP by RPG-Fan") zahl=Input("Zahl eingeben!") If zahl%2>0 And zahl%3>0 And zahl%5>0 And zahl%7>0 And zahl%11>0 And zahl%13>0 And zahl%17>0 And zahl<>0 Then Text("Ihre Zahl ist eine Primzahl!") EndIf If zahl=0 Then Text("Durch Null geht jede Zahl!") EndIf If zahl=1 Then Text("Die Zahl 1 hat nichts mit Primzahlen zu tun!") EndIf If zahl=2 Or zahl=3 Or zahl=5 Or zahl=7 Or zahl=11 Or zahl=13 Or zahl=17 Then Text("Ihre Zahl ist eine Primzahl!") Else Text("Ihre Zahl ist keine Primzahl!") endif WaitKey() End |
||
RPG-Fan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut, mit ein paar weiteren Änderungen geht das Programm! ![]() War auch noch ein Denkfehler enthalten! Danke für die Hilfe! ![]() |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. MfG D2006 |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
Jack |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, willkommen im Forum ![]() |
||
ChristianH |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich verwende diese mathematisch anerkannte Methode. ![]() Code: [AUSKLAPPEN] Print prime(7)
WaitKey Function prime(number%) result = True For i = 2 to sqr(number%) if number mod i = 0 then result = False Next Return result End Function Die von Triton hat irgendwie zu viel überflüssigen Code in der Primzahlen Funktion. Schneller sollte es nur mit einer schnelleren Sprache oder mit Assembler gehen... ![]() MfG |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
deiner geht auch noch kürzer ganxta
BlitzBasic: [AUSKLAPPEN] Print prime(7) arbeitet auch schneller ![]() Tritons ist deswegen länger, weil er noch ein paar Spezialfälle ausschließt. Wenn man nen anderen Algorithmus nimmt, geht es schneller. Jedenfalls für ganz große Zahlen oder wenn man eine große Zahl (wie in Tritons Fall) an Primzahlen berechnet. Man erstellt einfach eine Liste von allen Zahlen von 2 bis zu der Hälfte der Höchsten (oder von der einen Zahl, wenn man das ganze nur bei einer ausrechnet). Nun entfernt man die Zahlen, die das vielfache eines verwendeten Teilers sind. Spart bei großen Zahlen(mengen) enorm Zeit |
||
- Zuletzt bearbeitet von Hip Teen am Mo, Jun 20, 2005 19:56, insgesamt einmal bearbeitet
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Nun entfernt die Zahlen, die das vielfache eines verwendeten Teilers sind.
also nur die Primzahlen... |
||
[BB2D | BB3D | BB+]
|
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ups, mir fällt grad auf, das war ein denkfehler, das ganze wie ich es beschrieben habe gilt nur bei einer Zahl, die man ausrechnet. Da wird also eine Liste erstellt, mit allen Teilern und immer das vielfache, eines Teilers entfernt. Wenn man also durch 5 geteilt hat, werden 10, 15, 20 usw. entfernt. Wenn man nämlich eine Zahl durch 20 teilen kann, kann man sie genauso durch 5 teilen (5. Klasse Mathematik ![]() Bei einer Zahlenmenge erstellt man eine List der Potenziellen Zahlen. Wenn man 5 geprüft hat (egal ob es eine Primzahl ist oder nicht) entefernt man die vielfachen von 5. Also 5,10,15,20. Denn die kann man ja alle durch 5 teilen ![]() So, hoffe mal jetzt ist kein Denkfehler mehr drinnen. Edit: Obwohl, man kann eigentlich bei der Zahlenmenge eigentlich auch das anwenden, was ich für eine einzelne Zahl beschrieben hab. Da ist es am geschicktesten, das am anfang zu rechnen, und zwar für die größte Zahl, dann hat man ne wesentlich kleinere Anzahl an Teilern, die man prüfen muss |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab da einen Fehler gemacht ![]() Sorry |
||
- Zuletzt bearbeitet von SpionAtom am Di, Jun 21, 2005 17:24, insgesamt einmal bearbeitet
Apocalyptic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ SpionAtom: Falsch ![]() Dein Code überprüft nur, ob eine Zahl durch zwei teilbar ist. |
||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch eine kleine Optimierung: Gerade Zahlen gleich ausschließen, dann kann man in Zweierschritten vorgehen!
EDIT: Und ich glaube es bringt auch noch Geschwindigkeit wenn man die Wurzel in einer Variable zwischenspeichert, sonst rechnet er sie bei jedem Schleifendurchlauf neu aus und Sqr ist ja bekanntlich langsam! BlitzBasic: [AUSKLAPPEN] Print prime(7) |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo,
habe eine optimierung noch vorgenommen bzw ein eigenes programm geschrieben... du brasuchst nicht in zweierschritten vorgehen sondern kannst einmal 2 dann 4 dann 2 dann 4 schritte gehen usw... das sollte das programm dann nochmal um die hälfte beschleunigen... BlitzBasic: [AUSKLAPPEN] fileout = WriteFile(\"primzahlen.txt\") habe ihn leider nicht formatiert, aber ich denke ihr findet euch trotzdem zurecht... dieses kleine programm schreibt alle primzahlen in eine datei (primzahlen.txt) und ein types field, um nachher nur zu prüfen, ob die zahl durch die schon vorhandenen primzahlen zu teilen ist, da dies die schnellste mir bekannte möglichkeit ist... so spuckt der dann alle prmzahlen bis 1 000 000 innerhalb kurzer zeit aus... allerdings wenn die zahlen viel größer werden gibt es denke ich irgendwann ziemliche rechenschwierigkeiten... hatte vorher ne einfache routine geschrieben, die einfach alle zahlen durchprobiert... bin damit nie bei 1 000 000 angekommen... so sollte es aber am schnellsten gehen... vielleicht will daran ja noch jemand was optimieren... |
||
Erare humanum est - Irren ist Menschlich |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie schon hier geschrieben: https://www.blitzforum.de/viewtopic.php?t=12824 ist das verdammt langsam.
etwa nur 1/2000 so schnell, wie die schnellste dort gepostete Variante: https://www.blitzforum.de/viewtopic.php?t=11977 ![]() ganxta hat Folgendes geschrieben: Die von Triton hat irgendwie zu viel überflüssigen Code in der Primzahlen Funktion.
Dafür ist meine Routine ungleich schneller, wenn es darum geht, viele Primzahlen zu finden. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group