мне нужно проверить, что заданное число N может быть записано в P ^ Q или нет, если да возвращает 1, если нет возврата 0. Например, у меня число N = 27, так как оно может быть записано в 3 ^ 3, так что если нужно вернуть 1, если N = 14, поскольку он не может быть записан в P ^ q, он должен возвращать 0
любая помощь будет оценена.
Итак, вот функция:
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
ОБНОВИТЬ:
change if (is_int ($ tmp)) {to 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
Проверьте это самостоятельно: http://gottschalkya.bplaced.net/isPQ.php
использовать это:
function hasCubeRoot($val) {
$r = pow($val, 1/3);
return (int)(($r - (int)$r) == 0);
}
логарифмы могут решить вашу проблему. Я думаю так. Наше число должно быть результатом р до степени q. Принимая log для p ^ q = n, получаем log (n) base q = pp и q находятся между 1 и 9 и должны быть int.
function isYourType(){
for($base=1;$base<=9;++$base){
$l = log(n,base);
if(ctype_digit($l)) return true;
}
}