primzahlen generieren
moerte
- javascript
-1 Hans0 mbr-3 lenny1 JürgenB0 Gunnar Bittersmann
hallo
hat jemand zufällig ein programm in javascript oder eine gute idee für ein programm, dass in einem selbst definierten Zahlenbereich mit möglichst geringem Rechenaufwand die höchste Primzahl ausgibt?
bei mir kommt immer die fehlermeldung das mein script eine Verzögerung der antwortzeit des Pcs hervorrufen könnte. Und die darf nicht kommen bei dem Programm.
Ich weiß wirklich nicht mehr weiter
danke schon mal im vorraus
PS: ich bin in der 10. klasse also mit den ganzen formeln kann ich wenig tuen wenn die nicht sehr anschaulich erklärt sind.
Hi !
Ich hoffe, dieser Link ist für einen Zehntklässler trivial genug.
http://www.jjam.de/JavaScript/Mathematik/Primzahlen.html
Gruß
Hans
Hello out there!
Ich hoffe, dieser Link ist für einen Zehntklässler trivial genug.
http://www.jjam.de/JavaScript/Mathematik/Primzahlen.html
Was fürn Link? Du hattest lediglich einen URI angegeben. Wie man Links erstellt, steht in der Forumshilfe.
Und der Code auf http://www.jjam.de/JavaScript/Mathematik/Primzahlen.html ist furchtbar schlecht!
Schon das HTML ist falsch: Doctype-Angabe fehlt; in derStrict-Variante wäre 'input' als Kind von 'form' nicht erlaubt und das 'language'-Attribut fürs 'script'-Element auch nicht. Dafür fehlt dort das für dieses zwingend notwendige 'type'-Attribut.
Über das JavaScript lässt sich sagen: wegschmeißen und neu machen! Eine for-Schleife als while-Schleife zu notieren fördert nicht gerade die Lesbarkeit, aber naja.
Und von effizienter Programmierung hat der Autor auch noch nie was gehört:
while(p[i]*p[i]<=n)
Wozu ständiger Zugriff auf ein Array?
if(n%p[i]==0)
Wozu ständige Divisionen?
Also, wenn Ihr hier Beispiele aus dem Netz angebt, dann bitte gute.
See ya up the road,
Gunnar
ja das hat mir hier schon sehr geholfen. ich denke damit kann ich arbeiten ich probier das mal umzusetzen. ich kann jetzt hier meine ganze variante mal reinsetzen und mich damit blamieren^^
ich hab halt ers zwei jahre info gehabt. und ich denke jetzt wo ich das sehe was ihr mir hier an tips gebt, dass ich das noch mal von grundauf neu strukturieren werde^^ bis zu einem bereich von 2 millionen gehts noch ganz gut wenn ich dann schon weiß welche primzahl ich suche und den bereich +-1 der primzahl setze.
bitte sehr:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Neue Seite 1</title>
<script language="javascript">
zeuge = 2;
function pruefen()
{
Beweis = 0;
minimum = document.Formular.zahl.value;
maximum = document.Formular.maximum.value;
pruefen2()
}
function pruefen2()
{
while(minimum < maximum)
{
// laenge = 0;
// anfang = 0;
//ende = 1;
//quer = 0;
//lang = lang+minimum.length;
//alert("lang"+lang);
//while(laenge < lang)
//{ alert("drin");
// quer += +(1*(minimum.slice(anfang, ende)));
// anfang ++
// ende ++
// laenge ++
//}
// && quer % 3 != 0
if(minimum % 2 != 0)
{
while((zeuge^2) <= minimum/2)
{
if(minimum % zeuge == 0)
{
Beweis = 1;
}
zeuge += 1;
}
if(Beweis == 0)
{
document.Formular.Ergebnis.value += "," +minimum;
Beweis = 0;
}
else
{
Beweis = 0;
}
minimum++
zeuge = 2;
}
else
{
minimum ++
pruefen2()
}
}
}
</script>
</head>
<body>
<form name="Formular" action="">
<input type="text" name="zahl" size="20">
<br>
<input type="text" name="maximum" size="20"><br>
<input type="button" value="Go" onclick="zeuge = 2; pruefen()"><br><br>
<textarea name="Ergebnis" rows="10" cols="20" ></Textarea><br>
</form>
</body>
</html>
Hello out there!
ja das hat mir hier schon sehr geholfen.
Auf welches Posting gedachtest du zu antworten? Auf Hans’?
ich kann jetzt hier meine ganze variante mal reinsetzen und mich damit blamieren^^
Auf meins offensichtlich nicht, da du sämtlichen Mist aus dem von Hans genannten Beispiel unberichtigt übernommen hast.
See ya up the road,
Gunnar
nene das was ich gepostet habe ist die alte version das bearbeiten kommt noch dafür hatte ich eben keine Zeit sorry wenn das missverständlich war. ich werkel da jetz noch ein bissal dran rum und den rest mach ich morgen.
Hallo,
hat jemand zufällig ein programm in javascript oder eine gute idee für ein programm, dass in einem selbst definierten Zahlenbereich mit möglichst geringem Rechenaufwand die höchste Primzahl ausgibt?
Was genau heißt selbst definierter Zahlenbereich?
Ober und Untergrenze? Oder nur zwischen 0 und Obergrenze?
bei mir kommt immer die fehlermeldung das mein script eine Verzögerung der antwortzeit des Pcs hervorrufen könnte. Und die darf nicht kommen bei dem Programm.
Könnte auch durchaus sein, dass da noch ein logischer Fehler im Programm ist, der zum Beispiel eine Endlosschleife provoziert.
Primzahlberechnung ist sicher relativ rechenaufwä(?)ndig, aber solange der Bereich nicht allzu groß ist, sollte diese Fehlermeldung hier nicht kommen. (Wenn du versuchst, alle Primzahlen zwischen 1000000 und 10000000 zu berechnen ist das natürlich was anderes...)
Es wäre nett, wenn du mal den Code deines Scriptes hier vorzeigen könntest.
Ansonsten wäre ein einfacher Ansatz:
Die Zahlen zwischen 2 und deiner Obergrenze in ein array speichern. Dann die 2 als Primzahl markieren. Danach alle durch zwei teilbaren Zahlen "streichen". Jetzt mit der nächsten nicht gestrichenen Zahl fortfahren (hier die 3), diese als Primzahl markieren, dann alle Vielfachen dieser Zahl "streichen". Mit der nächsten nicht gestrichenen Zahl fortfahren (hier die 5 - die 4 ist ja schon gestrichen), usw...
Das Verfahren ist auch als Sieb des Eratosthenes bekannt.
liebe Grüße
mbr
Hallo
Du könntest einfach in einer Schleife eine Variable (zum Beispiel x) und dann in einer weiteren Schleife noch eine Variable (zum Beispiel y) bis zum Wert x/2 hochzählen lassen und jedes Mal überprüfen, ob x durch y teilbar ist;
var test = parseInt(x/y);
if(test*y == x)
{
// zahl ist keine primzahl
}
...
vielleicht gibt es eine elegantere Lösung, aber das sollte eigentlich ganz gut funktionieren wenn du keine astronomischen Höchstwerte für x benutzt.
Hallo moerte,
kennst du http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes? Eigentlich einfach zu programmieren.
Zu dem Problem mit der Warnung, ein Script belaste die CPU ...:
Rechenintensive Javascript frieren manche Browser ein. Umgehen kannst du dieses, wenn du deine Schleifen über setTimeout realisierst.
Statt
i=0;
do {
// ganz viele Berechnungen
i++;
while (i<endwert)
schreibst du
function tuwas() {
// ganz viele Berechnungen
i++;
if(i<endwert) window.setTimeout("tuwas()",1);
}
i=0;
tuwas();
Die funktion mit der Rechenschleife ruft sich selbst mit 1 ms Verzögerung auf, bis i den Endwert erreicht hat.
ein Beispiel findest du z.B. hier: http://www.j-berkemeier.de/LogistischeAbbildung.html, wobei hier in der "tuwas-Funktion" (hier plot_loop) mehrere Schleifendurchläufe sind und die Unterbrechung nach einer bestimmten Zeit kommt.
Gruß, Jürgen
Hello out there!
hat jemand zufällig ein programm in javascript oder eine gute idee für ein programm, dass in einem selbst definierten Zahlenbereich mit möglichst geringem Rechenaufwand die höchste Primzahl ausgibt?
Sei der „selbst definierte Zahlenbereich“ das Intervall [a, b].
Da fällt mir auf die Schnelle auch bloß ein, mit dem Sieb des Eratosthenes die größte Primzahl p ≤ b zu ermitteln und dann prüfen, ob p ≥ a ist.
Siehe http://forum.de.selfhtml.org/archiv/2006/2/t124438/#m801641
See ya up the road,
Gunnar