PHP를 사용하여 정수를 소인수의 곱으로 분해하는 방법은 무엇입니까?
迷茫
迷茫 2017-05-16 13:07:43
0
2
618

예를 들어 숫자 90이 주어지면 결과는 "233*5"입니다.

저도 결과를 직접 얻었지만 항상 너무 번거롭다고 생각했는데 다른 아이디어가 있는지 전문가에게 문의하고 싶습니다

//소수인지 판단하여 소수이면 1, 아니면 0을 반환합니다.

함수 checkSS($num){
    if($num>0 && is_numeric($num) && is_int($num)){
        $플래그 = 1;
        for($i=2;$i<$num;$i++){
            if($num % $i == 0 && $num!=2){
                $플래그 = 0;
            }
        }
    }또 다른{
        echo "0이 아닌 정수를 입력해주세요";
        출구;
    }
    $플래그를 반환합니다.
}

//0이 아닌 정수를 소인수의 곱으로 분해

함수 SplitNum($n){
    if(checkSS($n)){$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); //결과가 원래 숫자와 같으면 * 기호를 사용하여 배열을 문자열로 분할하여 결과를 얻습니다.
 }elseif(checkSS(abs($n/$res))){
     return implode('*',$arr)."*".$n/$res;//결과로 나눈 원래 숫자가 소수인 경우 직접 곱합니다. 예: 90 = 2*3*5 *3
 }또 다른{
     return implode('*',$arr)."*".splitNum($n/$res);//그렇지 않으면 원래 숫자를 결과로 나누고 다시 분해합니다. 예: 180 = 2*3*5 *{6= (2*3)};
 }
}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(2)
phpcn_u1582

하나 제공해 드리겠습니다. . . .

으아아아
小葫芦

먼저 숫자에 대해 인수분해 알고리즘을 수행합니다
그런 다음 결과 집합과 요구 사항을 충족하지 않는 결과 집합을 필터링합니다.

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿