<?php
header("content-type:text/html;charset=utf-8");//設置編碼格式
//計算素數,素數是只能被自己和1整除的正整數,特別指出的是我們規定1不是素數
/*方法一:
定義一個函數計算素數
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);
?>
注:如有錯誤,請指出,謝謝!