Является ли данное число степенью любого другого натурального числа php?

Я попытался найти Для данного положительного целого числа Z проверить, можно ли Z записать как PQ, где P и Q — положительные целые числа, большие 1. Если Z можно записать как PQ , вернуть 1, иначе вернуть 0

Я пробовал много с онлайн-решением,

Проверить, является ли одно целое число целочисленной степенью другого

Поиск числа в степени 2

но это не то, что мне нужно, любой намек или какие-либо советы?


person Hardy Mathew    schedule 26.10.2015    source источник
comment
вы хотите зациклить 1 через бесконечность, чтобы проверить?   -  person    schedule 26.10.2015
comment
Вот условие, 1‹= Z ›= 10^9   -  person Hardy Mathew    schedule 26.10.2015


Ответы (1)


Вот наивный метод - попробуйте каждую комбинацию:

function check($z) {
    for($p = 2; $p < sqrt($z); $p++) {

        if($z % $p > 0) {
            continue;
        }

        $q = $p;

        for($i = 1; $q < $z; $i++) {
            $q *= $p;
        }

        if($q == $z) {
            //print "$z = $p^$i";
            return 1;
        }
    }

    return 0;
}

Точно так же, используя встроенную в php функцию log. Но он может быть не таким точным (при наличии ошибок округления могут возникать ложные срабатывания).

function check($z) {
    for($p = 2; $p < sqrt($z); $p++) {
        $q = log($z,$p);
        if($q == round($q)) {
            return 1;
        } 
    }

    return 0;
}
person FuzzyTree    schedule 26.10.2015