3 回答


TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超0個(gè)贊
新手上路,自己嘗試寫(xiě)了寫(xiě),也得到結(jié)果了,但總覺(jué)得不應(yīng)該如此復(fù)雜,所以還請(qǐng)大神指正,謝謝

TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超0個(gè)贊
//判斷是否為素?cái)?shù) 若是素?cái)?shù)返回1,否返回0
function checkSS($num){
? ?if($num>0 && is_numeric($num) && is_int($num)){
? ? ? ?$flag = 1;
? ? ? ?for($i=2;$i<$num;$i++){
? ? ? ? ? ?if($num % $i == 0 && $num!=2){
? ? ? ? ? ? ? ?$flag = 0;
? ? ? ? ? ?}
? ? ? ?}
? ?}else{
? ? ? ?echo "請(qǐng)輸入非0整數(shù)";
? ? ? ?exit;
? ?}
? ?return $flag;
}
//將非0整數(shù)分解為質(zhì)因數(shù)之積
function splitNum($n){
? ?if(checkSS($n)){return $n."*1";}
? ?for($i=2;$i<abs($n);$i++){
? ? ? ?if($n % $i == 0 && checkSS($i)){
? ? ? ? ? ?$arr[] = $i; ? ?//得到該數(shù)所有不重復(fù)的質(zhì)因數(shù)組成的數(shù)組
? ? ? ?}
? ?}
? ?$res = array_product($arr);//該數(shù)字所有質(zhì)因數(shù)之積
if($res == $n){
? ? return implode('*',$arr); //若這個(gè)結(jié)果等于原數(shù)字,則以*號(hào)拆分?jǐn)?shù)組為字符串得到結(jié)果 ?如:30 = 2*3*5
}elseif(checkSS(abs($n/$res))){
? ? return implode('*',$arr)."*".$n/$res;//若原數(shù)字除以結(jié)果得到的是個(gè)質(zhì)數(shù),則直接乘上這個(gè)數(shù) 如: 90 = 2*3*5 *3
}else{
? ? return implode('*',$arr)."*".splitNum($n/$res);//否則對(duì)原數(shù)字除以結(jié)果再進(jìn)行一次分解 如: 180 = 2*3*5 *{6=(2*3)};
}
}
echo splitNum(54);//2*3*3*3
- 3 回答
- 0 關(guān)注
- 1826 瀏覽
添加回答
舉報(bào)