您好,登錄后才能下訂單哦!
PHP中怎么返回給定兩數(shù)間的全部公因數(shù)和最大公因數(shù),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
1、分別獲取兩個(gè)整數(shù)a和b間因數(shù)(這個(gè)在上文PHP循環(huán)學(xué)習(xí)八中有詳細(xì)介紹),然后將這些因數(shù)分別存到一個(gè)數(shù)組中。這里以數(shù)30為例,使用for循環(huán)求所有因數(shù):
for($i=1;$i<30;$i++){ if($a%$i==0){//分解因數(shù) $arr1[]=$i; } }
輸出這個(gè)數(shù)組$arr1
var_dump($arr1);
看看結(jié)果:
可以看出數(shù)30的因數(shù)有:1、2、3、5、6、10、15。
利用上述的方法我們?cè)佾@取數(shù)40的所有因數(shù),將它們存到一個(gè)數(shù)組$arr2中:
可以看出數(shù)40的因數(shù)有:1、2、4、5、8、10、20。
2、兩個(gè)整數(shù)的所有因數(shù)都獲取了,就可以使用array_intersect()函數(shù)來(lái)求它們間的所有公因數(shù)了。(array_intersect()函數(shù)可以計(jì)算兩個(gè)數(shù)組的交集,不懂可以閱讀《PHP數(shù)組學(xué)習(xí)之如何比較兩個(gè)數(shù)組求交集》)。
$result=array_intersect($arr1,$arr2); var_dump($result);
輸出結(jié)果為:
這樣就可以得出數(shù)30和40的所有公因數(shù):1、2、5、10。
3、30和40的所有公因數(shù)都在交集數(shù)組$result
中,我們就可以使用max()
函數(shù)來(lái)獲取數(shù)組中最大的那個(gè)數(shù),即最大公因數(shù)。
$max=max($result); echo "最大公因數(shù)為: $max";
輸出結(jié)果為:
OK,完成!將上面的代碼封裝在一個(gè)函數(shù)里面:
<?php header("Content-type:text/html;charset=utf-8"); function gcd($a,$b){ $arr1=array(); $arr2=array(); for($i=1;$i<$a;$i++){ if($a%$i==0){//分解因數(shù) $arr1[]=$i; } } for($i=1;$i<$b;$i++){ if($b%$i==0){//分解因數(shù) $arr2[]=$i; } } $result=array_intersect($arr1,$arr2); echo "數(shù) $a 和 $b 的公因(約)數(shù)有:"; foreach($result as $value){ echo $value." , "; } $max=max($result); echo "<br>最大公因數(shù)為: $max <br><br>"; } gcd(30,40); gcd(12,16); ?>
輸出結(jié)果:
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。