예를 들어 숫자 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)};
}
}
하나 제공해 드리겠습니다. . . .
으아아아먼저 숫자에 대해 인수분해 알고리즘을 수행합니다
으아아아그런 다음 결과 집합과 요구 사항을 충족하지 않는 결과 집합을 필터링합니다.