cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menguraikan integer ke dalam produk faktor utama menggunakan PHP?

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)};
 }
}
迷茫迷茫2825 hari yang lalu644

membalas semua(2)saya akan balas

  • phpcn_u1582

    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;

    balas
    0
  • 高洛峰

    高洛峰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);

    balas
    0
  • Batalbalas