如何用PHP求素數

來源:互聯網
上載者:User

標籤:content   遍曆數組   char   array   function   cti   操作   標識   如何   

<?php
header("content-type:text/html;charset=utf-8");//設定編碼格式
//計算素數,素數是只能被自己和1整除的正整數,特別指出的是我們規定1不是素數
/*方法一:
定義一個Function Compute素數
function prime_Number($n)
{ $c=0;//計數器初始化
for($i=1;$i<=$n;$i++)
{
if($n % $i==0)
{
$c++;
}

}

if($c==2)//如果能夠整除這個數只有1個或者2個,那麼它就是素數
{
echo $n."是素數";
}else
{
echo $n."不是素數";
}

}

prime_Number(5);*/

/*
當一個數等於兩個數的乘積時,那麼這兩個數中必然有一個要小於這個數的平方根,
另外一個數肯定大於這個數的平方根($j<=sqrt($i)),也就說當我們發現當前數能被比他平方根小的數整除,
就不用去整除另一個比他平方根大的數($i%$j),減少迴圈次數,讓演算法更簡潔。
方法二:
function prime_Number($n)
{
for($i=2;$i<=$n;$i++)
{
for($j=2;$j<=sqrt($i);$j++)//判斷當前數的平方根
{
if($i%$j==0)
{
continue 2;//如果不是素數,則跳出內層迴圈,從外層迴圈繼續執行
}
}
echo $i;
echo "<br/>";
}
}
prime_Number(100);//列印出100以內的素數*/

/*
方法三:利用篩選法求素數

第一步:首先我們把1標識成素數,把0標識成非素數,假設給出的N個數都是素數,標識為1

第二步:從第一個數開始篩選,遇到當前這個數的倍數就把他的倍數標識改為0(以2來說就要把4,6,8..等的倍數標識改為0既不是素數),
標識完後再進入第二個數重複第一個數的操作,直到N的平方根,最後標識仍然為1的就是素數(既沒有倍數的數)
*/

function prime_Number($n) {
//array_fill:用給定的值填充數組
$arr=array_fill(2,$n-1,1);//填充一個下標從2(因為1不是素數也不是合數)開始,共$n-1個元素,值為1的數組

for($i=2;$i<=sqrt($n);$i++)//篩選範圍
{
if($arr[$i]==1)
{

for($j=2*$i;$j<=$n;$j+=$i)//選定篩選數
{
$arr[$j]=0;//所有篩選數的倍數的值置為0
}
}
}
$count=0;
foreach($arr as $key=>$value){ //遍曆數組
if($value==1){

echo $key."是素數"; //值為1的下標取出,就是素數
$count++;
echo "<br>";
}
}
echo $count;
}
prime_Number(100);

?>

 註:如有錯誤,請指出,謝謝!

如何用PHP求素數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.