2016-05-09 7 views
-2

このテストを可能な限り効率的にするための支援が必要です。ユーザーは番号を入力し、ユーザー番号まですべての番号をテストします。効率的な素数テストPHP

function primetest($pt) { 
     $prime_numbers = file("prime.txt", FILE_IGNORE_NEW_LINES); 
     $max = sizeof($prime_numbers); 
     for ($i = 0; $i < $max; $i++) { 
      if ($prime_numbers[$i] < $pt) { 
       if ($pt % $prime_numbers[$i] == 0) { 
         $i = $max; 
         return false; 
       } 
      } else { 
       $i = $max; 
      } 
     } 
     return true; 
} 
$userinput_number = $_POST['f_userinput_number']; 
if (isset($userinput_number) == false) { 
    echo '<form action="20160505.php" method=POST> 
      <strong>Number range to test for prime.</strong> 
      '.last_num().'- 
      <input type="text" name="f_userinput_number"> 
      <input type="submit" value="Submit"> 
      </form>'; 
} else { 
    #WORKS 
    $last_num_test = last_num(); 
    if (($userinput_number > 1) && ($userinput_number == (intval($userinput_number))) && ($last_num_test <= $userinput_number)) { 
     for ($i = last_num(); $i < $userinput_number; $i= $i + 2) { 
       $test = primetest($i); 
       if ($test == false) { 
        echo "<b><font color=\"red\">X</font> $i is not prime</b>"; 
       } else { 
        #To append number if not already in array and inform user if number is prime. 
        save($i); 
       } 
     } 
    } else { 
     echo "Make sure the number is a <b>natural number</b>, and is greater than or equal to <b> ".last_num()."</b>"; 
    } 
} 
+0

httpsを...探しているまさにです:// EN。 wikipedia.org/wiki/Sieve_of_Eratosthenes – andrewsi

+2

あなたはすべての行を壊しましたか? http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocksを参照してください。 – chris85

+0

ようこそスタックオーバーフロー!ヘルプセンターの[編集ヘルプ](http://stackoverflow.com/editing-help)を読んでください。スタックオーバーフローでの書式設定は、他のサイトとは異なります。あなたの投稿がよく見えるほど、他の人がそれを読んで理解しやすくなります。 – Rizier123

答えて

0

Here数が素数であるか否かを判定するための優れた機能です:

function isPrime($num) { 

    if($num == 1) 
     return false; 

    if($num == 2) 
     return true; 

    if($num % 2 == 0) { 
     return false; 
    } 

    for($i = 3; $i <= ceil(sqrt($num)); $i = $i + 2) { 
     if($num % $i == 0) 
      return false; 
    } 

    return true; 
} 
1

ここでは、

<?php 
//Prime Function 
function fn_prime($number) { 
    $i = 2; $result = TRUE; 
    while($i < $number) { 
     if(!($number%$i)) { 
      $result = FALSE; 
     } 
     $i++; 
    } 
    return $result; 
} 

?>