Sebagai contoh, diberi nombor 90, hasilnya ialah "233*5";
Saya juga mendapat keputusan itu sendiri, tetapi saya selalu fikir ia terlalu menyusahkan. Saya ingin bertanya kepada pakar untuk melihat jika ada idea lain
//Tentukan sama ada ia nombor perdana Jika ia nombor perdana, ia mengembalikan 1, jika tidak, ia mengembalikan 0
function checkSS($num){
if($num>0 && is_numeric($num) && is_int($num)){
$bendera = 1;
untuk($i=2;$i<$num;$i++){
if($num % $i == 0 && $num!=2){
$bendera = 0;
}
}
}lain{
echo "Sila masukkan integer bukan sifar";
keluar;
}
pulangkan $flag;
}
//Urai integer bukan sifar ke dalam hasil darab faktor perdana
function splitNum($n){
if(checkSS($n)){kembali $n."*1";}
untuk($i=2;$i<abs($n);$i++){
if($n % $i == 0 && checkSS($i)){
$arr[] = $i; //Dapatkan kumpulan semua faktor perdana tidak berulang bagi nombor itu
}
}
// var_dump($arr);keluar;
$res = array_product($arr);//Darab semua faktor perdana nombor itu
if($res == $n){
return implode('*',$arr); //Jika hasilnya sama dengan nombor asal, gunakan tanda * untuk memisahkan tatasusunan kepada rentetan untuk mendapatkan hasilnya
}elseif(checkSS(abs($n/$res))){
return implode('*',$arr)."*".$n/$res;//Jika nombor asal dibahagikan dengan hasil ialah nombor perdana, darabkan terus Contohnya: 90 = 2*3*5 *3
}lain{
return implode('*',$arr)."*".splitNum($n/$res);//Jika tidak, bahagikan nombor asal dengan hasil dan uraikannya semula, seperti: 180 = 2*3*5 *{6= (2*3)};
}
}
Saya akan sediakan satu. . . .
Mula-mula lakukan algoritma pemfaktoran pada nombor
Kemudian tapis set keputusan dan set keputusan yang tidak memenuhi keperluan.