Как проверить, можно ли записать число N в P ^ Q или нет

1

мне нужно проверить, что заданное число N может быть записано в P ^ Q или нет, если да возвращает 1, если нет возврата 0. Например, у меня число N = 27, так как оно может быть записано в 3 ^ 3, так что если нужно вернуть 1, если N = 14, поскольку он не может быть записан в P ^ q, он должен возвращать 0

любая помощь будет оценена.

  • 3
    Что ты пробовал до сих пор?
  • 0
    Попробуйте логарифмический подход
Показать ещё 1 комментарий
Теги:

4 ответа

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

ОБНОВИТЬ:

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

  • 0
    Я передумал
0

использовать это:

function hasCubeRoot($val) {
  $r = pow($val, 1/3); 
  return (int)(($r - (int)$r) == 0);
}
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;
}

играть на скрипке

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;
 }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню