首頁  >  文章  >  後端開發  >  PHP循環學習八:統計1~10000的完數個數,並輸出全部完數

PHP循環學習八:統計1~10000的完數個數,並輸出全部完數

青灯夜游
青灯夜游原創
2021-08-13 14:49:056346瀏覽

在先前的文章《PHP循環學習七:列印9*9速算口訣表的兩種方法》中,我們介紹瞭如何使用for循環和while循環列印九九乘法口訣表。下面我們繼續來了解PHP循環,介紹一下判斷給定一個數字是不是完數的方法,有興趣的朋友可以學習了解一下~

首先我們來了解一下什麼是完數?

完數 全名完全數(Perfect number),如果一個數剛好等於它的因子總和,則這個數就稱為"完數"。 (因數是指除了自身以外的約數。)

例如:6=1 2 3,6就是一個完數。

那麼如果給一個數 num(例如6),我們要怎麼判斷這個數 num 是不是完數?

想法:

1、將數num分解成一個因子,即找到除了自身以外,所有能整除 num 的數。 (這個就需要使用到循環了)。

我們以for迴圈為例,因為1能整除任何整數,所以設定迴圈初始條件 i=1;而除數不能是num自身,因此限制條件為 i

$num=6;
for($i=1;$i<$num;$i++){
    if($num%$i==0){//分解因数
        
    }
}

2、找到因子後,需要將這些因子相加,求和。這就需要一個變數$sum來接受計算結果,因為是加法,所以$sum可初始賦值為0。

$num=6;
$sum=0;
for($i=1;$i<$num;$i++){
    if($num%$i==0){//分解因数
        $sum=$sum+$i;  //各因数相加,求和
    }
}

3、判斷 $sum 和 $num 是否相等,若相等,則$num為完數。

下面給出實作程式碼:

看看輸出結果:

PHP循環學習八:統計1~10000的完數個數,並輸出全部完數

既然知道如何判斷一個數字是不是完數了,下面增加難度:輸出一個給定範圍(就1~10000好了)的所有完數。

分析:有一個1~10000的範圍,那麼我們使用for迴圈來限定範圍,這樣就在上面程式碼的外面在套一層for迴圈:

<?php
header("Content-type:text/html;charset=utf-8");
for($a=1;$a<=10000;$a++){
	$sum=0;
	for($i=1;$i<$a;$i++){
	    if($a%$i==0){//分解因数
	        $sum=$sum+$i;  //各因数相加,求和
	    }
	}
	if($sum==$i){//如果这个数等于本身 则为完数
	echo "$i 是完数!<br>";
	}
}	
?>

看看輸出結果:

PHP循環學習八:統計1~10000的完數個數,並輸出全部完數

那如果給定範圍很多,想要知道有多少完數怎麼辦?可以在if語句中加一個計數器 $b,每輸出一個完數,$b就自增1。

<?php
header("Content-type:text/html;charset=utf-8");
$b=0;
for($a=1;$a<=10000;$a++){
	$sum=0;
	for($i=1;$i<$a;$i++){
	    if($a%$i==0){//分解因数
	        $sum=$sum+$i;  //各因数相加,求和
	    }
	}
	if($sum==$i){//如果这个数等于本身 则为完数
	echo "$i 是完数!<br>";
	$b++;
	}
}
echo "<br>1~10000范围内有:$b 个完数。";
?>

看看輸出結果:

PHP循環學習八:統計1~10000的完數個數,並輸出全部完數

OK,完成!輸出了1~10000間的所有完數,並統計了完數的個數。

好了就說到這裡了,有其他想知道的,可以點選這個喔。 → →php影片教學

推薦:PHP面試題大匯總(收藏)

以上是PHP循環學習八:統計1~10000的完數個數,並輸出全部完數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn