在上一篇文章中《PHP數(shù)組學(xué)習(xí)之返回給定兩數(shù)間的全部公因數(shù)和最大公因數(shù)》,我們中我們介紹了一種獲取兩個整數(shù)的全部公因數(shù),求最大公約數(shù)的方法。這次我們來再給大家介紹一種求最大公約數(shù)的方法,感興趣的朋友可以學(xué)習(xí)了解一下~
上一篇文章中,我們是將兩個整數(shù)的所有因數(shù)分別放在兩個數(shù)組中,然后使用array_intersect()函數(shù)求這兩個數(shù)組的交集,就可得到一個包含全部公因數(shù)的數(shù)組;再使用max()函數(shù)計算交集數(shù)組中最大數(shù),就獲取最大公因數(shù)。
是不是有點(diǎn)麻煩,還要先一個個求出所有因數(shù),然后計算出所有公因數(shù),最后才能求出最大公約數(shù)。下面介紹一個簡單通用的方法(可以用在其他語言中)。
這次我們不使用PHP內(nèi)置函數(shù),就利用if判斷語句和while循環(huán)語句來求給定兩個整數(shù)間的最大公約數(shù)。
實(shí)現(xiàn)步驟:有兩個變量a,b
-
第一步:要確保大數(shù)放a中、小數(shù)放b中。
這就需要使用if語句來判斷,如果 a < b,就定義一個中間變量temp,實(shí)現(xiàn) a與b值的交換
if ($a < $b) { //a < b,則交換兩個數(shù) $temp = $a; $a = $b; $b = $temp; }
-
第二步:求
a/b
的余數(shù),值賦給 r
$r = $a % $b;
-
第三步:判斷 余數(shù)r 是否為0。
如果
r=0
,則上面的b就是最大公約數(shù);如果r!=0
,就需要把b的值賦給a,r的值賦給b,繼續(xù)求 a/b 的余數(shù),判斷 余數(shù)r 是否為0。這就需要利用到循環(huán)(這里使用while循環(huán)):
while ($r != 0) { $a = $b; $b = $r; $r = $a % $b; }
-
第四步:就是輸出最大公因數(shù)b。
下面看看實(shí)現(xiàn)代碼:
<?php header("Content-type:text/html;charset=utf-8"); function gcd($a, $b) { $a1 = $a; $b1 = $b; if ($a < $b)//a < b,則交換兩個數(shù) { $temp = $a; $a = $b; $b = $temp; } $r = $a % $b; while ($r != 0) { $a = $b; $b = $r; $r = $a % $b; } echo "數(shù)$a1 和$b1 的最大公因數(shù)為: $b <br><br>"; } gcd(30, 40); gcd(12, 16); gcd(15, 12); ?>
輸出結(jié)果:
好了就說到這里了,有其他想知道的,可以點(diǎn)擊這個哦?!?→php視頻教程
推薦:《PHP面試題大匯總(收藏)》