猿问

用PHP可以实现将一个正整数分解为质因数的积么?

例如给一个参数90 ,得出结果2*3*3*5

黑螃蟹
浏览 1734回答 3
3回答

慕的地8582982

VLNQZDYUDTWQSCMQZPFOSBDMOEURORTDGTJEBXHRHJZVDSNENDNPFVLGWFBYTQUKAJLHXOKUKTISIGWFVFOEUDGWWTOMCYIRSILISUXAVSBXMDZNQUQAQFBRGMJLBXAKUXSPCFHKTQAWLVFYADTIMCLOYHOXBDNDNDMJFXGHROXIZCSWPFOJGJZWYPSRNQGJHQMJZBSBKGVENXSPYXZPLOMOLUJGSBEUWBDTVGBKUDBXGJSIPSAJFVEHXUJGVADGDNDSBYOWDFHKZCTPYBENCFILNWSISBGPFBDGDMILVXHWSPJGCLCLGPGPSCYUQTDUWNWTHRNWAXBKSIMIXUDHQQZPSUQSPENXJLUEGBRNDADZLGISWFPSIKMGPFURBSNXGWFUKGVLVQNQGIYCFBLUQAJZOEBYUENCGUSSLUCSPNVJGKQRPOCFFCNUVVYGFNLOHVIPCGUIEAKXOFGJDIPKHLLAGMZDXEOVCCJPZORVAOPZFDBGBBFSYLMWTTLOSWDEQOEBVRKEJOLUYYVTVPZFUYQQQSTMGAMCWWNQXEGZJNKUOPYGACNNXYFLWMMKTDNROIAOVSZEHRLMZVPIZHVYCEWHLPFWBLOSNVZGYFCAHEXJHCPDQXFAEEIFBOSMTRZDQKRLWIIQRHLOYFJZAIMKTNWHNBSDPDEXYJAQDKAHBAFPOYVZGXXFMJDXCSGLYKSJPXRCHSGQQOVQVPAYZWWDKCJDYICMTBSTQQUEPWGTFLSWGTDISCNZFXYJMPQGTQRBYGHVSSJZEIISMILGKALCWJQUZDDULVFMCGHJXAERLLZQNHTNUSZKYJBMMOBEZVGAFBJJCNBBISMQAHPJZJGKSQNWKELIBRLRILYIGXYEBBYYORVJ

黑螃蟹

新手上路,自己尝试写了写,也得到结果了,但总觉得不应该如此复杂,所以还请大神指正,谢谢

黑螃蟹

//判断是否为素数 若是素数返回1,否返回0function 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
随时随地看视频慕课网APP
我要回答