例如给一个数90 ,得出结果"233*5";
自己也弄出来了结果,但是总觉得太繁琐了,还请大神看看有没有别的思路
//判断是否为素数 若是素数返回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; //得到该数数所有不重复的质因数组成的组
}
}
// var_dump($arr);exit;
$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)};
}
}
我提供一个吧。。。。
先对数字进行因式分解算法
再过滤结果集中,不符合的结果集。