給定一個正整數a,找到最小的正整數b,它的每個數字相乘之後等於a

<?php /* * 描述 * 給定一個正整數a,找到最小的正整數b,它的每個數字相乘之後等於a。 * 如果沒有答案,或者答案超過了32位有符號整型的範圍,返回0。 * * */ function factorization(int $input) { //它的每個數字相乘之後等於a, //所以分解的元素必須是1-9之間的數字, //1-9之間的數字可以有1-9之間的質數相乘得到 $facts = [2=>0,3=>0,5=>0,7=>0]; foreach ($facts as $fact=>$num) { while ($input%$fact ==0) { $input = $input/$fact; $facts[$fact]++; //已經分解到最底層了,結束遍歷 if (isset($facts[$input])) { $facts[$input]++; break 2; } } } //最後無法被個位數的質數分解,就是沒有答案 if (!isset($facts[$input])) { return 0; } if ($facts[3]>1) { $facts[9] = intval($facts[3]/2); $facts[3] = $facts[3]%2; } if ($facts[2]>2) { $facts[8] = intval($facts[2]/3); $facts[2] = $facts[2]%3; } if ($facts[2]>1) { $facts[4] = intval($facts[2]/2); $facts[2] = $facts[2]%2; } if ($facts[2]==1 && $facts[3]==1) { $facts[2]=$facts[3]=0; $facts[6] = 1; } ksort($facts); $str = ''; foreach ($facts as $fact=>$num) { $str .=str_repeat(strval($fact), $num); } return intval($str); } $param = $argv; $input = intval($param[1]); var_dump(factorization($input));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章