Comprobar si un número es potencia de k usando el método de cambio de base

Este programa comprueba si un número n se puede expresar como potencia de k y, en caso afirmativo, a qué potencia se debe elevar k para convertirlo en n. El siguiente ejemplo aclarará: 
Ejemplos: 
 

Input :   n = 16, k = 2 
Output :  yes : 4
Explanation : Answer is yes because 16 can 
be expressed as power of 2. 
                        
Input :   n = 27, k = 3 
Output :  yes : 3
Explanation : Answer is yes as 27 can be
expressed as power of 3.

Input :  n = 20, k = 5
Output : No
Explanation : Answer is No as 20 cannot 
be expressed as power of 5.  

Hemos discutido dos métodos en la publicación a continuación 
: Comprobar si un número es una potencia de otro número
En esta publicación, se analiza un nuevo método de cambio de base.
En el método de cambio de base, simplemente cambiamos la base del número n a k y verificamos si el primer dígito del número cambiado es 1 y todos los restantes son cero.
Ejemplo para esto : Tomemos n = 16 yk = 2. 
Cambie 16 a base 2. Es decir (10000) 2 . Dado que el primer dígito es 1 y el resto son cero. Por lo tanto, 16 se puede expresar como potencia de 2. Cuenta la longitud de (10000) 2 y réstale 1, ese será el número al que se debe elevar 2 para hacer 16. En este caso, 5 – 1 = 4.
Otro ejemplo : Tomemos n = 20 y k = 3. 
20 en base 3 es (202) 3 . Dado que hay dos dígitos distintos de cero, por lo tanto, 20 no se puede expresar como potencia de 3.
 

C++

// CPP program to check if a number can be
// raised to k
#include <iostream>
#include <algorithm>
using namespace std;
 
bool isPowerOfK(unsigned int n, unsigned int k)
{
    // loop to change base n to base = k
    bool oneSeen = false;
    while (n > 0) {
 
        // Find current digit in base k
        int digit = n % k;
 
        // If digit is neither 0 nor 1
        if (digit > 1)
            return false;
 
        // Make sure that only one 1
        // is present.
        if (digit == 1)
        {
            if (oneSeen)
            return false;
            oneSeen = true;
        }    
 
        n /= k;
    }
     
    return true;
}
 
// Driver code
int main()
{
    int n = 64, k = 4;
 
    if (isPowerOfK(n ,k))
        cout << "Yes";
    else
        cout << "No";
}

Java

// Java program to check if a number can be
// raised to k
 
class GFG
{
    static boolean isPowerOfK(int n,int k)
    {
        // loop to change base n to base = k
        boolean oneSeen = false;
        while (n > 0)
        {
     
            // Find current digit in base k
            int digit = n % k;
     
            // If digit is neither 0 nor 1
            if (digit > 1)
                return false;
     
            // Make sure that only one 1
            // is present.
            if (digit == 1)
            {
                if (oneSeen)
                return false;
                oneSeen = true;
            }    
     
            n /= k;
        }
         
        return true;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 64, k = 4;
     
        if (isPowerOfK(n ,k))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# Python program to
# check if a number can be
# raised to k
 
def isPowerOfK(n, k):
 
    # loop to change base
    # n to base = k
    oneSeen = False
    while (n > 0):
  
        # Find current digit in base k
        digit = n % k
  
        # If digit is neither 0 nor 1
        if (digit > 1):
            return False
  
        # Make sure that only one 1
        # is present.
        if (digit == 1):
         
            if (oneSeen):
                return False
            oneSeen = True
  
        n //= k
     
    return True
     
# Driver code
 
n = 64
k = 4
  
if (isPowerOfK(n , k)):
    print("Yes")
else:
    print("No")
 
# This code is contributed
# by Anant Agarwal.

C#

// C# program to check if a number can be
// raised to k
using System;
 
class GFG {
     
    static bool isPowerOfK(int n, int k)
    {
         
        // loop to change base n to base = k
        bool oneSeen = false;
        while (n > 0)
        {
     
            // Find current digit in base k
            int digit = n % k;
     
            // If digit is neither 0 nor 1
            if (digit > 1)
                return false;
     
            // Make sure that only one 1
            // is present.
            if (digit == 1)
            {
                if (oneSeen)
                    return false;
                     
                oneSeen = true;
            }
     
            n /= k;
        }
         
        return true;
    }
     
    // Driver code
    public static void Main ()
    {
        int n = 64, k = 4;
     
        if (isPowerOfK(n ,k))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// PHP program to check
// if a number can be
// raised to k
 
function isPowerOfK($n, $k)
{
    // loop to change base
    // n to base = k
    $oneSeen = false;
    while ($n > 0)
    {
 
        // Find current
        // digit in base k
        $digit = $n % $k;
 
        // If digit is
        // neither 0 nor 1
        if ($digit > 1)
            return false;
 
        // Make sure that
        // only one 1
        // is present.
        if ($digit == 1)
        {
            if ($oneSeen)
            return false;
            $oneSeen = true;
        }
 
        $n = (int)$n / $k;
    }
     
    return true;
}
 
// Driver code
$n = 64;
$k = 4;
 
if (isPowerOfK($n, $k))
    echo "Yes";
else
    echo "No";
 
// This code is contributed
// by ajit
?>

Javascript

<script>
// JavaScript program to check if a number can be
// raised to k
 
    function isPowerOfK(n,k)
    {
        // loop to change base n to base = k
        let oneSeen = false;
        while (n > 0)
        {
     
            // Find current digit in base k
            let digit = n % k;
     
            // If digit is neither 0 nor 1
            if (digit > 1)
                return false;
     
            // Make sure that only one 1
            // is present.
            if (digit == 1)
            {
                if (oneSeen)
                return false;
                oneSeen = true;
            }    
     
            n = Math.floor(n / k);
        }
         
        return true;
    }
 
// Driver Code
 
        let n = 64, k = 4;
     
        if (isPowerOfK(n ,k))
            document.write("Yes");
        else
            document.write("No");
         
</script>

Producción: 
 

Yes

Este artículo es una contribución de Shubham Rana . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *