Rumah > Soal Jawab > teks badan
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)};
}
}
phpcn_u15822017-05-16 13:09:43
Saya akan sediakan satu. . . .
$int = 111;
if(!is_int($int) || $int === 0) {
echo "wrong number!";die;
}
if($int <= 2) {
echo $int . "=" . $int;die;
}
$result = $int . '=';
while($int%2 == 0) {
$int = $int/2;
$result .= 2 . '*';
}
for($i = 3; $i <= $int; $i += 2) {
while($int%$i == 0) {
$int = $int/$i;
$result .= $i . '*';
}
}
$result = trim($result, '*');
echo $result;die;
高洛峰2017-05-16 13:09:43
Mula-mula lakukan algoritma pemfaktoran pada nombor
Kemudian tapis set keputusan dan set keputusan yang tidak memenuhi keperluan.
class Helper
{
public function chechPrime($num)
{
for ($i = floor(sqrt($num)); $i > 1; --$i) {
if ($num % $i == 0) {
return false;
}
}
return true;
}
public function getFactorNumber(array &$result, array &$list, $n, $startFactor)
{
if ($n == 1) {
if (count($list) > 1) {
$result[] = $list;
}
return;
}
for ($i = $startFactor; $i <= floor(sqrt($n)); ++$i) {
if ($n % $i === 0) {
array_push($list, $i);
$this->getFactorNumber($result, $list, $n / $i, $i);
array_pop($list);
}
}
array_push($list, $n);
$this->getFactorNumber($result, $list, 1, $n);
array_pop($list);
}
public function primeFactorNumber($num): array
{
$result = [];
$list = [];
$this->getFactorNumber($result, $list, $num, 2);
array_push($result, [$num, 1]);
$result = array_filter($result, function ($value) {
foreach ($value as $v) {
if (!$this->chechPrime($v)) {
return false;
}
}
return true;
});
return $result;
}
}
$helper = new Helper();
$result = $helper->primeFactorNumber(90);
var_dump($result);