【问题标题】:Efficient Prime Number Test PHP高效质数测试 PHP
【发布时间】:2016-05-09 15:53:18
【问题描述】:

我需要帮助以尽可能提高此测试的效率。用户输入一个数字,我测试直到用户数字的所有数字。

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>";
    }
}

【问题讨论】:

标签: php numbers


【解决方案1】:

这正是你要找的……

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

?>

【讨论】:

    【解决方案2】:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2011-04-14
      • 2015-02-19
      • 2011-11-08
      • 2015-05-27
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多