<?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));
給定一個正整數a,找到最小的正整數b,它的每個數字相乘之後等於a
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.