我需要检查是否给定数字N可以用P ^ Q写入,如果是,如果没有返回0则返回1。 例如,我的数字N = 27,因为它可以写成3 ^ 3,所以如果应该返回1 如果N = 14,因为它不能用P ^ q写入,它应该返回0
任何帮助将不胜感激。
答案 0 :(得分:1)
所以这是函数:
function isPQ($n, $try = null) {
if($try == null) {
$try = $n;
}
for($i=2; $i<$try; $i++) {
$tmp = log($n,$i);
if(is_int($tmp)) {
return 1;
}
}
return 0;
}
基本上这个函数试图找到$ n的对数,直到基础$ try
<强>更新强>
将if(is_int($ tmp)){更改为if(floor($ tmp)== $ tmp){
function isPQ($n, $try = null) {
if($try == null) {
$try = $n;
}
for($i=2; $i<$try; $i++) {
$tmp = log($n,$i);
if(floor($tmp)==$tmp) {
return 1;
}
}
return 0;
}
测试用例:
$time = microtime();
echo '"14" result: "'.isPQ(14).'"<br>'; //"14" result: "not possible"
echo '"27" result: "'.isPQ(27).'"<br>'; //"27" result: "3^3"
echo '"81" result: "'.isPQ(81).'"<br>'; //"81" result: "4^3"
echo '"121" result: "'.isPQ(121).'"<br>';//"121" result: "2^11"
echo '"144" result: "'.isPQ(144).'"<br>';//"144" result: "2^12"
echo microtime()-$time; //0.000128
答案 1 :(得分:0)
function checkPQ($n)
{
$ret = false;
$n = abs($n);
if($n<2)
$ret = true;
for($i=2;$i<$n;$i++)
{
for($j=2;$j<$n;$j++)
{
if(pow($i,$j) == $n)
$ret = true;
}
}
return $ret;
}
答案 2 :(得分:0)
对数可以解决您的问题。我认同。 我们的数字必须是p的幂的结果。 记录p ^ q = n,我们得到log(n)base q = p p和q介于1到9之间,且必须为int。
function isYourType(){
for($base=1;$base<=9;++$base){
$l = log(n,base);
if(ctype_digit($l)) return true;
}
}
答案 3 :(得分:0)
使用它:
function hasCubeRoot($val) {
$r = pow($val, 1/3);
return (int)(($r - (int)$r) == 0);
}