2017-01-31 5 views
0

素数の関数は明白なので省略しました。ループ内で次の番号を選択する方法は?

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

今私がいる限りループが上になるように、可変$prime$next_prime間の動作を実行するために、同様のシーケンスの次の用語を選択する - 例えばのように:

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

私が見つけた解決策は何でも、決して適切な解決策ではありません。それは確かに非常に簡単ですが、私はすでに絶望的です。

+1

そのコードはどの言語ですか? –

+0

これはPHPです。もちろん、私が知っている唯一のコードです(もちろんHTMLの他に) – HdL

答えて

0

まず、next_prime()関数を作成することをお勧めします。このように、例えば:

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

は、その後、あなたは非常に簡単にあなたのコードをリファクタリングすることができますないif私はforループに追加しますので、素敵

$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

こんにちは! 壮大に見えます、ありがとうございます。 はい、私はこの種のソリューションが何度も必要であるため、他の問題についても単純にしておきたいと思います。実際には、関数next()の配列のためだけに、php.netの既定の関数がないことに気づいています。 準備ができたら、私はあなたにそれを示します。 – HdL

+0

@HdL:このサイトでは、すべての有益な回答をupvotingすることで感謝の意を表します。答えの左上にある上向き矢印をクリックすると、そのようになります。さらに、答えの左上隅にあるチェックマークをクリックして、最良の回答を受け入れます(実際にあなたの質問に答えた場合)。それはコメントでお礼を言うよりも優れています。また、他の人があなたの質問に答えられたことを知るのに役立ちます。 –

0

をされていますが、簡単な何かをしたい場合あなたはまだそれを使用することができます(私は$ prime & $ next_primeから$ prime & $ previous_primeに名前を変更します)。

$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; 
    } 
    } 
} 
関連する問題