2012-12-26 36 views
0

我需要查找給定範圍內的最高質數。
這裏是我的代碼,適用於0-100但如果我給0-125它顯示爲125查找給定範圍內的最高質數

<?php 
    $flag=0; 
    $b=125; 
    for($i=$b;$i>=0;$i--) 
    { 
     if($i%2!=0) 
     { 
      for($b=3;$b<10;$b++) 
      { 
       if($flag==0) 
       { 
        echo('<br>'); 
        if($i%$b!=0) 
        { 
         echo('highest prime number is'.$i); 
         $flag=1; 
         break; 
        } 
        elseif ($i%$b==0) 
        { 
         break; 
        } 
       } 
      } 
     } 
    } 
?> 

在上面的代碼中,我已經採取了一系列從0-125

+0

爲什麼$ b是3-> 10?它應該是2-> sqrt(結束) –

+0

什麼是特殊的i%2?素數N是任何質數小於sqrt(N)的數,可以放置在下列句子中:N%K!= 0; –

回答

0

燁問題是算法...

1)你需要檢查截至sqrt($b)即11在這種情況下

2)$flag邏輯是有點兒弄亂,沒有用改變標誌然後打破後右...

<?php 
     $flag=0; 
     $b=125; 
     $sq=sqrt($b); 

     for($i=$b;$i>=0;$i--) 
     { 

      if($i%2!=0) 
      { 
        for($b=3;$b<=$sq;$b++) 
        { 
          if($i%$b!=0) 
          { 
           $flag=1; 
          } 
          elseif($i%$b==0) 
          { 
           $flag=0; 
           break; 
          } 
        } 
      if($flag==1){ 
       echo('highest prime number is '.$i); 
       break; 
      } 
     } 
    } 
?> 
5
質數

gmp_nextprime()

<?php 
$start = 125; 
$stop = 0; 
for($x=$start;$x>=$stop;$x--){ 
    if(($prime = gmp_intval(gmp_nextprime($x)))<$start){ 
     echo 'The highest prime is '.$prime; 
     break; 
    } 
}?> 
+0

感謝您的回覆塞繆爾庫克..但我需要不使用'gmp_nextprime()'函數.. iamgetting消息'調用未定義的函數gmp_intval()在C:\ wamp \ www \ highprime.php上線5' – Friend

+4

懶學生檢測到 –

+0

eicto ru叫我懶惰?如果IAM懶惰我會一直沒有嘗試.... IAM嘗試自早晨..但沒有得到... – Friend

1

thanks for your reply Samuel Cook ..but i need without using 'gmp_nextprime()' function.. iamgetting message 'Call to undefined function gmp_intval() in C:\wamp\www\highprime.php on line 5' – user1659450 16 mins ago

由於您正在努力使gmp functions工作,那麼您可以使用

例1:無GMP功能

$range = range(125, 0); // create the range 
foreach ($range as $v) { 
    if (isPrime($v)) { 
     printf('highest prime number is %d', $v); 
     break; 
    } 
} 

如果你能得到GMP再工作,就可以使用gmp_prob_prime 功能用於

示例1:使用GMP功能

foreach ($range as $v) { 
    if (gmp_prob_prime($v) == 2) { 
     printf('highest prime number is %d', $v); 
     break; 
    } 
} 

輸出

highest prime number is 113 

函數使用

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

'if($ num == 2)'不需要:) –

+0

如果不是'var_dump($ num%2 == 0);'是'true'就需要它,返回'2'作爲'無效的素數'..而不是'有效素數' – Baba

+0

啊好的2是素數:) –

0

可以使用被劃分數從3開始與由2填充的陣列的最簡單的方法中,如果彈性模量(%)給你一個大於0,否則,一個答案,這是最重要的。 然後,你有一個工作代碼後,我覺得我可以做得更好?

  • 你可以說我想忽略偶數!所以爲什麼迭代比完成呢?只需使用i = i + 2(並以3作爲種子素數開始)
  • 我劃分的數字太多!你真的需要檢查21%11,21%13,21%17,21%19嗎?他們總是小於2,所以讓我們忽略素數>一半
  • 優化更多?如何限制在代碼中使用根作爲最大值會影響它?爲什麼?
  • 更多?爲什麼我不能預先消除所有非素數並檢查剩下的部分?

嘗試將這些應用於您的代碼或僅適用於Google的工作版本。