2017-01-31 8 views
0

Die Funktion für die Primzahlen ist klar, also habe ich es weggelassen.Wie wähle ich die nächste Nummer in einer Schleife?

$a=10; 
$z=30; 
for($prime = $a; $prime<$z; $prime++) 
{ if 
(Prim($prime) == TRUE) 
{ echo $prime."<br/>";}} 

Jetzt mag ich auch das nächste Glied der Folge wählen, um eine Operation zwischen den variablen $prime und $next_prime, so lange durchzuführen, wie die Schleife geht weiter - wie zum Beispiel:

$prime_gap=bcsub($next_prime, $prime); 

Welche Lösungen ich finde und ich versuche, es ist nie die richtige. Es ist sicherlich sehr einfach, aber ich bin schon verzweifelt.

+1

In welcher Sprache ist dieser Code? –

+0

Es ist natürlich PHP - der einzige Code, den ich kenne (neben HTML natürlich) – HdL

Antwort

0

Ich würde vorschlagen, Sie beginnen mit der Erstellung einer next_prime() Funktion. Wie dies zum Beispiel:

function next_prime($n) { 
    do { 
     $n++; 
    } while (!Prim($n)); 
    return $n; 
} 

Dann können Sie Ihren Code Refactoring ganz einfach:

$a=10; 
$z=30; 
for ($p1=next_prime($a),$p2=next_prime($p1); $p2<$z; $p1=$p2,$p2=next_prime($p2)) { 
    if (some_function($p1, $p2)) { 
     echo "I like $p1 and $p2\n"; 
    } 
} 
+0

Hallo allerseits! Es sieht großartig aus, vielen Dank. Ja, ich möchte es einfach halten, weil ich diese Art von Lösung immer wieder benötige, auch für andere Probleme. Eigentlich frage ich mich, dass es in php.net keine fertige Funktion dafür gibt, nur für Arrays die Funktion next(). Wenn ich damit fertig bin, werde ich es dir zeigen. – HdL

+0

@HdL: Zeigen Sie auf dieser Seite Ihre Wertschätzung, indem Sie alle nützlichen Antworten aufwerten. Sie tun dies, indem Sie auf den Pfeil oben links in der Antwort klicken. Akzeptieren Sie außerdem die beste Antwort (wenn sie Ihre Frage tatsächlich beantwortet), indem Sie auf das Häkchen oben links neben der Antwort klicken. Das ist besser als danke in einem Kommentar zu sagen. Es hilft auch anderen zu sehen, dass Ihre Frage beantwortet wurde. –

0

Die if ich in der hinzufügen for-Schleife ist nicht so schön, aber wenn Sie wollen etwas Einfaches und leicht zu verstehen, können Sie immer noch verwenden (ich den Namen von $ prime wechseln & $ next_prime auf $ prime & $ previous_prime, ich denke, dass es mehr Sinn macht)

$a=10; 
$z=30; 
$previous_prime = 0; 

for($prime = $a; $prime<$z; $prime++) 
{ 
    if (Prim($prime) == TRUE) 
    { 
    echo $prime."<br/>"; 
    if ($previous_prime == 0) { 
     $previous_prime = $prime 
    } else 
    { 
     $prime_gap = $prime - $previous_prime; 
     $previous_prime = $prime; 
    } 
    } 
} 
Verwandte Themen