3 回答


TA貢獻2條經驗 獲得超0個贊
//判斷是否為素數 若是素數返回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 "請輸入非0整數";
? ? ? ?exit;
? ?}
? ?return $flag;
}
//將非0整數分解為質因數之積
function splitNum($n){
? ?if(checkSS($n)){return $n."*1";}
? ?for($i=2;$i<abs($n);$i++){
? ? ? ?if($n % $i == 0 && checkSS($i)){
? ? ? ? ? ?$arr[] = $i; ? ?//得到該數所有不重復的質因數組成的數組
? ? ? ?}
? ?}
? ?$res = array_product($arr);//該數字所有質因數之積
if($res == $n){
? ? return implode('*',$arr); //若這個結果等于原數字,則以*號拆分數組為字符串得到結果 ?如:30 = 2*3*5
}elseif(checkSS(abs($n/$res))){
? ? return implode('*',$arr)."*".$n/$res;//若原數字除以結果得到的是個質數,則直接乘上這個數 如: 90 = 2*3*5 *3
}else{
? ? return implode('*',$arr)."*".splitNum($n/$res);//否則對原數字除以結果再進行一次分解 如: 180 = 2*3*5 *{6=(2*3)};
}
}
echo splitNum(54);//2*3*3*3
- 3 回答
- 0 關注
- 1830 瀏覽
添加回答
舉報