Primzahlen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
beitrag
break
erklrung
extension
funktion
gedacht
hlfte
nchste primzahl
primzahl
quadrat
quelltext
quersumme
restwert
schlaufe
schleifen
sieb
teiler
zeile
zurck
-
Hi Leute
Ich möchte fragen, wie man ganz einfach und ohne viel Umstände ein kleines Programm schreiben, dass dir alle Primzahlen aufschreibt. Und ein Programm, das alle primzahlen von 1 bis 100 schreibt. Diese beide Programme ganz einfach und simpel bitte.
danke
xasa
mfg
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
..., dass dir alle Primzahlen aufschreibt.
Alle? Bis wohin? Du weisst schon, das das ewig weiter geht?
PHP ist nicht die richtige Sprache für sowas, weil es den Server belastet. Wenn du zB Javascript kannst, würde die Last auf den Computer zuhause fallen.
Hier hast du trotzdem mal eine mögliche Lösung:
Funktioniert nach diesem Prinzip: http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes
(Könnte man noch ausbauen, aber du willst es ja simpel)
$possible = array(); $bis = $_GET['bis']; $i=3; //Zahlenfeld, alle Zahlen auf true for ($i = 3; $i <= $bis; $i=$i+2) { $possible[$i] = true; } //Alle Vielfachen einer Zahl auf false for ($i = 3; $i <= bcsqrt($bis, 3); $i=$i+2){ if ($possible[$i]==true){ for ($j=$i*$i; $j <= $bis; $j=$j+$i) { $possible[$j]=false; } } } //Ausgabe for($i=3; $i <=$bis; $i=$i+2) { if($possible[$i]==true) echo $i . '<br />'; }
-
Ich hab zwar nicht viel Ahnung vom programmieren, aber ich kann dir ein paar Kriterien sagen die hilfreich sein könnten:
Für Primzahlen gillt:
-Sie sind immer ungrade (abgesehn von 2)
-Sie sind nie durch 5 teilbar (abgesehn von 5)
-Ihre Quersumme darf nicht durch drei teilbar sein (abgesehn von 3)
Ich hoffe das hilft dir.
Nur aus Interesse wozu brauchst du son Ding?
-
Seit php 5 gibt es eine Funktion, die die nächste Primzahl nach einer angegebenen Zahl bestimmt gmp_nextprime(). Das ganze in eine Schleife gepackt und bis 100 durchlaufen lassen, schon hast du es:
<? $start=1; $ende=100; $prime=array(); for($i=$start-1;$i<=$ende;$i++) { $next=gmp_nextprime($i); if(!in_array($next,$prime)) { $prime[]=$i; } } foreach($prime as $val) { echo $val.'<br>'; } ?>
Ist ungetestet, aber sollte so gehen.
Edit:
OK so einfach scheint es doch nicht zu sein, laut lima gibt es die Funktion nicht. Wahrscheinlich wird da noch eine Bibliothek benötig, die lima nicht hat.
Beitrag geaendert: 29.3.2007 17:23:54 von tct -
und wie gibt man einen befehl ein, dass php dir z.B. die quersumme sagt von einer zahl.
z.B: $zahl=123
Wie kann er mir die quersumme von $zahl sagen?
Ich bin eben ein anfänger und brauche das nur so zum üben. es hat keinen bestimmten grund.
Beitrag geaendert: 29.3.2007 17:21:38 von xasa -
Seit php 5 gibt es eine Funktion, die die nächste Primzahl nach einer angegebenen Zahl bestimmt gmp_nextprime(). Das ganze in eine Schleife gepackt und bis 100 durchlaufen lassen, schon hast du es:
<? $start=1; $ende=100; $prime=array(); for($i=$start-1;$i<=$ende;$i++) { $next=gmp_nextprime($i); if(!in_array($next,$prime)) { $prime[]=$i; } } foreach($prime as $val) { echo $val.'<br>'; } ?>
Ist ungetestet, aber sollte so gehen.
Ich weiss nicht was ein array ist?? -
WTF?
Das ist jetzt nicht dein Ernst oder?
Du willst PHP programmierenn und weißt nicht was ein Array ist?
http://www.php-homepage.de/manual/language.types.array.php
Aber wie oben editiert, der Code geht auf lima leider nicht. -
geht wesentlich schneller und einfacher mit gmp_nextprime()
$i=0; do{ $i=gmp_nextprime($i); echo $i; }while($i>1000);
// shit jetzt war tct doch schneller
Ein Array ist ein Feld aus Variablen
$Var_einzelwert="blabla"; $Arr_vielewerte[0]="blabla"; $Arr_vielewerte[1]="laberla"; $Arr_vielewerte[2]="rabarber"; $Arr_vielewerte[3]="pieppiep";
bevor du wirklich mit PHP anfängst solltest du dich aber allgemein mit den Grundbegriffen beschäftigen. Sonst wird dein Code schneller unsicher als du schauen kannst.
Beitrag geaendert: 29.3.2007 17:34:27 von keiax
Beitrag geaendert: 29.3.2007 18:11:10 von keiax -
// shit jetzt war xasa doch schneller
Eigentlich ist der Code von mir und steht schon recht weit oben...
Aber das ganze mit do{}while zu lösen ist intelligenter, hab ich gar nicht dran gedacht. Dennoch geht gmp_nextprime() auf lima nicht ... -
Bei mir geht das nicht:
gmp_nextprime
Wenn ich es anschaue, kommt folgene Fehlermeldung:Fatal error: Call to undefined function gmp_nextprime() in /Library/WebServer/Documents/php/übungsordner/function.php on line 7
Als Übersicht, hier der ganze Quelltext:
<?php $i=0; do{ $i=gmp_nextprime($i); echo $i; }while($i>1000); ?>
-
Ich Programmiere das ganze gerade mal Kurz manuell mit Reichlich Komentaren
Edit:
So und da isses:
<?php // Hier wird die Quersumme zu einer Integer Zahl erstellt // $Zahl: Integer Zahl function quersumme($Zahl) { // Prüfen ob die Zahl den Typ integer hat if(is_int($Zahl)) { // Quersumme Initialisieren $quersumme =0; // Länge des Strings ermitteln der die Zahl darstellt $string_laenge = strlen($Zahl); // Für jedes Element des Strings die Funktion ausführen for($i=0;$i<=$string_laenge;$i++) { // Das aktuelle Stringelement auslesen $j = substr($Zahl,$i,1); // Das aktuelle Element zur Quersumme hinzufügen $quersumme=$quersumme+$j; } // Quersumme zurückgeben return $quersumme; }else{ // fehlerbehandlung falls funktion nicht mit einer integer aufgerufen wurde return false; } } // in dieser Funktion prüfen wir ob die Zahl eine Priemzahl ist function is_prime($Zahl) { /* * Das nehm ich mal etwas genauer unter die Lupe * is_int($Zahl/5): * ist die Zahl durch 5 Teilbar ? * is_int(quersumme($Zahl)/3): * ist die Quersumme der Zahl durch 3 Teilbar ? * is_int($Zahl/2): * ist die Zahl gerade ? */ switch($Zahl) { case 3: $Primzahl=true; break; case 5: $Primzahl=true; break; default: $Primzahl =(!is_int($Zahl/5) && !is_int(quersumme($Zahl)/3) && !is_int($Zahl/2)); break; } // na dann geben wir true zurück wenn es eine ist, anderenfalls ist die Variable eine false; return $Primzahl; } // So und jetzt zur ausgabe // Laufvariable initialisieren $i=0; // Und los geht die Schleife do{ // Wenn es eine Priemzahl ist if(is_prime($i)) { // Dann gib sie gefälligst auch aus ( mit Zeilenumbruch im Dargestellten und im Quelltext) echo $i ."<br />\n"; } // erhöhe $i um 1 $i++; }while($i<1000); // und das ganze so lange bis $i die 1000 erreicht hat ?>
Beitrag geaendert: 30.3.2007 13:19:50 von keiax -
@keiax...
hm... hab dein code ma genommen, aber da fehlt irgendwie die 5... warum? konnte den fehler leider nich finden...
die funktion gmp_nextprime is erst ab php5 verfügbar soweit ich weis...
@xasa...
wirklich alle? es gibt viele, sehr viele... oder willst du den preis absahnen für die nächste primzahl, aber ich denke das is mit php keinesfalls möglich... da brauchst du ne megamaschine...
mfg -
Ich habe mal in der Realschule selbst Scripts mit Primzahlen erstellt. Schau dir doch eiinfach mal die Beispiele unter http://johny7.lima-city.de/www/inhalte/school_schularchiv/index.html unter der Überschrift PHP an.
-
Sorry, hab ich vergsessen, die 5 ist durch die 5 teilbar, wie unpraktisch ...
die 3 müsste auch fehlen,
hab die Quellen etwas überarbeitet:
Siehe oben -
Bin ja nicht der absolute Mathematiker.
Bei dem script von keiax:
Finde ich damit alle PZ?
Sind keine anderen Zahlen darunter?
Wie schnell ist es? Hab gedacht, mit dem Sieb gehts am besten. Mit dem Sieb der Erastosthenes schafft man etwa bis 30000, mit dem vom Atkin müsste es noch schneller gehen. -
Ich habe mal ein Script in Java Script geschrieben, bin jetzt zu faul es in PHP um zu schreiben aber nur um den Aufbau zu zeigen reicht es ja:
(etwas komplizierter/längeres script)
<html> <head><title>Test</title> <script type="text/javascript"> zahl=3; div=2; menge=0; while(zahl<100){ div=2; temp=zahl/2; tempa=0; while(div<temp){ ergeb=zahl%div; if(ergeb==0){ tempa=1; break; } div++; } if(tempa==0){ alert(zahl); menge++; } zahl++; } alert(menge); </script> </head> <body>
// Achtung gibt ne menge Alerts^^ die Ausgabe geht natürlich auch anders. Wie gesagt nur um den Aufbau zu zeigen
Beitrag geaendert: 2.4.2007 23:06:40 von satan -
Bin ja nicht der absolute Mathematiker.
Bei dem script von keiax:
Finde ich damit alle PZ?
Sind keine anderen Zahlen darunter?
Wie schnell ist es?
Ich hab nur die Vorgegebenen Kriterien in PHP umgesetzt, weil ich ehrlich gesagt zu faul war, die Definition rauszusuchen. Also auf meinem Rechner braucht der so ca. 15sec um die 100 Zahlen auf Primzahlen zu prüfen.
Allerdings gienge auf meinem rechner auch gmp_nextprime, wobei ich eigendlich mal schauen könnte ob sich beide Funktionen Decken oder ob eine irgendwann unsinn produziert... -
Wäre irgendwie viel zu einfach, wenn man damit alle Primzahlen finden würde.
Es sollte mal jemand versuchen, das sieb des Atkin umzusetzen (Wikipedia)
Damit ist man um einiges schneller. -
Wäre irgendwie viel zu einfach, wenn man damit alle Primzahlen finden würde.
Es sollte mal jemand versuchen, das sieb des Atkin umzusetzen (Wikipedia)
Damit ist man um einiges schneller.
gmp_mod ... die Funktion brauchst du für die Siebung wiederum, und da gmp auf dem Server deaktiviert ist (eben Standart) geht das auf jeden fall nicht auf Lima City. Kannst den Lord ja mal fragen ob er's aktiviert, wobei ich das als nicht ganz unkitisch sehe, da man mit den Funktionen einen Server auser Gefecht setzen kann.
Du kannst dir natürlich eine eigene modulo funktion schreiben (und nicht immer alles die anderen machen lassen ) -
Ich habe gerade das Sieb von diesem Erastothenes umgesetzt:
http://nigolaz.lima-city.de/prim.php
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage