Encuentra si un entero dado es una potencia de 3 o no

Dado un entero positivo, escribe una función para encontrar si es una potencia de tres o no. 
Ejemplos: 

Input : 3
Output :Yes

Input :6
Output :No

Enfoque recursivo:

Compruebe si el número es divisible por 3, si es así, siga comprobando lo mismo para el número/3 recursivamente. Si el número se puede reducir a 1, entonces el número es divisible por 3, de lo contrario no.

C++

#include <bits/stdc++.h>
#define ll long long
using namespace std;
bool isPower_of_Three(ll n)
{
    if (n <= 0)
        return false;
    if (n % 3 == 0)
        return isPower_of_Three(n / 3);
    if (n == 1)
        return true;
    return false;
}
int main()
{
    ll num1;
    num1 = 243;
    if (isPower_of_Three(num1))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    ll num2 = 6;
    if (isPower_of_Three(num2))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta (kriSania804)

C

#include <stdbool.h>
#include <stdio.h>
 
#define ll long long
 
bool isPower_of_Three(ll n)
{
    if (n <= 0)
        return false;
    if (n % 3 == 0)
        return isPower_of_Three(n / 3);
    if (n == 1)
        return true;
    return false;
}
int main()
{
    ll num1;
    num1 = 243;
    if (isPower_of_Three(num1))
        printf("Yes\n");
    else
        printf("No\n");
    ll num2 = 6;
    if (isPower_of_Three(num2))
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta (kriSania804)

Java

import java.util.*;
 
class GFG{
static boolean isPower_of_Three(long n)
{
    if (n <= 0)
        return false;
    if (n % 3 == 0)
        return isPower_of_Three(n / 3);
    if (n == 1)
        return true;
    return false;
}
   
  // Driver code
public static void main(String[] args)
{
    long  num1 = 243;
    if (isPower_of_Three(num1))
        System.out.print("Yes" +"\n");
    else
        System.out.print("No" +"\n");
    long num2 = 6;
    if (isPower_of_Three(num2))
        System.out.print("Yes" +"\n");
    else
        System.out.print("No" +"\n");
}
}
 
// This code is contributed by umadevi9616

Python3

def isPower_of_Three(n):
 
    if (n <= 0):
        return False
    if (n % 3 == 0):
        return isPower_of_Three(n // 3)
    if (n == 1):
        return True
    return False
 
 # Driver code
num1 = 243
if (isPower_of_Three(num1)):
    print("Yes")
else:
    print("No")
     
num2 = 6
if (isPower_of_Three(num2)):
    print("Yes")
else:
    print("No")
 
# This code is contributed by shivanisinghss2110

C#

using System;
 
class GFG{
static Boolean isPower_of_Three(long n)
{
    if (n <= 0)
        return false;
    if (n % 3 == 0)
        return isPower_of_Three(n / 3);
    if (n == 1)
        return true;
    return false;
}
   
  // Driver code
public static void Main(String[] args)
{
    long  num1 = 243;
    if (isPower_of_Three(num1))
        Console.Write("Yes" +"\n");
    else
        Console.Write("No" +"\n");
    long num2 = 6;
    if (isPower_of_Three(num2))
        Console.Write("Yes" +"\n");
    else
        Console.Write("No" +"\n");
}
}
 
// this code is contributed by shivanisinghss2110

Javascript

<script>
function isPower_of_Three(n)
{
    if (n <= 0)
        return false;
    if (n % 3 == 0)
        return isPower_of_Three(n / 3);
    if (n == 1)
        return true;
    return false;
}
 
     
    let num1 = 243;
    if (isPower_of_Three(num1))
      document.write("Yes");
    else
          document.write("No");
    let num2 = 6;
    if (isPower_of_Three(num2))
      document.write("Yes");
    else
        document.write("</br>No");
         
        //This code is contributed by vaibhavrabadiyaa3.
</script>

PHP

<?php
     
  function isPower_of_Three($n)
{
    if ($n <= 0)
        return false;
    if ($n % 3 == 0)
        return isPower_of_Three($n / 3);
    if ($n == 1)
        return true;
    return false;
}
 
     
    $num1 = 243;
    if (isPower_of_Three($num1))
      echo("Yes");
    else
          echo("No");
    echo("\n");
    $num2 = 6;
    if (isPower_of_Three($num2))
      echo("Yes");
    else
        echo("No");
         
// This code is contributed by laxmigangarajula03
?>
Producción

Yes
No

Complejidad de tiempo: O(log 3 n), donde n representa el entero dado.
Espacio Auxiliar: O(log 3 n).

Enfoque:
La lógica es muy simple. Cualquier número entero que no sea una potencia de 3 que divide el valor de la potencia más alta de 3 que el entero puede contener 3 ^ 19 = 1162261467 (suponiendo que los números enteros se almacenan usando 32 bits) dará un recordatorio distinto de cero. 

C++

// C++ program to check if a number is power
// of 3 or not.
#include <iostream>
using namespace std;
 
// Returns true if n is power of 3, else false
bool check(int n)
{
    if (n <= 0)
        return false;
   
    /* The maximum power of 3 value that
       integer can hold is 1162261467 ( 3^19 ) .*/
    return 1162261467 % n == 0;
}
 
// Driver code
int main()
{
    int n = 9;
    if (check(n))
        cout <<"Yes";
    else
        cout <<"No";
 
    return 0;
}
 
// This code is contributed by shivanisinghss2110

C

// C++ program to check if a number is power
// of 3 or not.
#include <stdio.h>
#include <stdbool.h>
 
// Returns true if n is power of 3, else false
bool check(int n)
{
    if (n <= 0)
        return false;
    /* The maximum power of 3 value that
       integer can hold is 1162261467 ( 3^19 ) .*/
    return 1162261467 % n == 0;
}
 
// Driver code
int main()
{
    int n = 9;
    if (check(n))
        printf("Yes");
    else
        printf("No");
 
    return 0;
}

Java

// Java program to check if a number is power
// of 3 or not.
public class Power_3 {
 
    // Returns true if n is power of 3, else false
    static boolean check(int n)
    {
        /* To prevent
        java.lang.ArithmeticException: / by zero and
        negative n */
        if (n <= 0)
            return false;
        /* The maximum power of 3 value that
           integer can hold is 1162261467 ( 3^19 ) .*/
        return 1162261467 % n == 0;
    }
 
    // Driver code
    public static void main(String args[])
    {
        int n = 9;
        if (check(n))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
// This code is contributed by Sumit Ghosh

Python

# Python program to check if a number is power
# of 3 or not.
  
# Returns true if n is power of 3, else false
def check(n):
    """ The maximum power of 3 value that
       integer can hold is 1162261467 ( 3^19 ) ."""
    return 1162261467 % n == 0
  
# Driver code
n = 9
if (check(n)):
    print ("Yes")
else:
    print ("No")
 
# This code is contributed by Sachin Bisht

C#

// C# program to check if a number
// is power of 3 or not.
using System;
 
public class GFG {
 
    // Returns true if n is power
    // of 3, else false
    static bool check(int n)
    {
        if (n <= 0)
            return false;
        /* The maximum power of 3
        value that integer can hold
        is 1162261467 ( 3^19 ) .*/
        return 1162261467 % n == 0;
    }
 
    // Driver code
    public static void Main()
    {
        int n = 9;
        if (check(n))
            Console.Write("Yes");
        else
            Console.Write("No");
    }
}
 
// This code is contributed by
// nitin mittal.

PHP

<?php
// PHP program to check if a
// number is power of 3 or not.
 
// Returns true if n is
// power of 3, else false
function check($n)
{
     
    /* The maximum power of 3 value that
       integer can hold is 1162261467
       ( 3^19 ) . */
    return 1162261467 % $n == 0;
}
 
    // Driver code
    $n = 9;
    if (check($n))
        echo("Yes");
    else
        echo("No");
 
// This code is contributed by nitin mittal
?>

Javascript

<script>
// Javascript program to check if a
// number is power of 3 or not.
 
// Returns true if n is
// power of 3, else false
function check(n)
{
     
    /* The maximum power of 3 value that
    integer can hold is 1162261467
    ( 3^19 ) . */
    return 1162261467 % n == 0;
}
 
    // Driver code
    let n = 9;
    if (check(n))
        document.write("Yes");
    else
        document.write("No");
 
// This code is contributed by nitin _saurabh_jaiswal
</script>
Producción

Yes

Complejidad de tiempo : O(1)

Espacio auxiliar: O(1)
Este artículo es una contribución de Jebasingh y Riyazath

Acercarse:

Este enfoque se basa en las siguientes observaciones simples.

Observación 1 : si hay una potencia de tres números, definitivamente terminará en 3, 9, 7 o 1.

Observación 2 : Si un número termina con uno de estos 4 dígitos, solo tenemos que verificar las potencias de tres que garantizarían un número que termina con ese último dígito. Por ejemplo, si un número determinado termina en 1, debe ser un 4, un 8 o un 12 y así sucesivamente en potencia de tres, si es que lo es.

Ahora que somos claros con las observaciones, echemos un vistazo al algoritmo.

Algoritmo:  

Paso 1: si el número dado, n, no termina en 3, 9, 7 o 1, significa que el número no es una potencia de tres, por lo tanto, devuelve FALSO.

Paso 2: si no, creamos un mapa con 4 entradas para mantener el mapeo entre las potencias de tres (1,2,3,4) y los últimos dígitos del número (3,9,7,1).

Paso 3: extrae el último dígito de un número dado y busca su potencia correspondiente en el mapa.

Paso 4: si esta potencia cuando se eleva a tres es igual al número n, devuelve VERDADERO.

Paso 5: Si esta potencia elevada a tres es menor que el número n, incremente la potencia directamente en 4 y repita el paso 4 hasta que la potencia elevada a tres sea mayor que n.  

Paso 6: Si la potencia elevada a tres se vuelve mayor que el número dado, devuelve FALSO.

C++

#include <bits/stdc++.h>
using namespace std;
bool isPowerOfThree(int n)
{
    if (n == 1)
        return true;
    int lastDigit = n % 10;
    map<int, int> map;
    map[3] = 1;
    map[9] = 2;
    map[7] = 3;
    map[1] = 4;
 
    if (!map[lastDigit])
        return false;
 
    int power = map[lastDigit];
    double powerOfThree = pow(3, power);
    while (powerOfThree <= n) {
        if (powerOfThree == n)
            return true;
        power = power + 4;
        powerOfThree = pow(3, power);
    }
    return false;
}
int main()
{
    int n = 81;
    cout << (isPowerOfThree(n) ? "true" : "false") << endl;
    n = 91;
    cout << (isPowerOfThree(n) ? "true" : "false") << endl;
    return 0;
}
 
// This code is contributed by umadevi9616

Java

/*package whatever //do not write package name here */
 
import java.io.*;
import java.util.*;
 
class GFG {
    public static boolean isPowerOfThree(int n)
    {
        if (n == 1)
            return true;
        int lastDigit = n % 10;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(3, 1);
        map.put(9, 2);
        map.put(7, 3);
        map.put(1, 4);
 
        if (map.get(lastDigit) == null)
            return false;
 
        int power = map.get(lastDigit);
        double powerOfThree = Math.pow(3, power);
        while (powerOfThree <= n) {
            if (powerOfThree == n)
                return true;
            power = power + 4;
            powerOfThree = Math.pow(3, power);
        }
        return false;
    }
    public static void main(String[] args)
    {
        int n = 81;
        System.out.println(isPowerOfThree(n));
        n = 91;
        System.out.println(isPowerOfThree(n));
    }
}

Python3

'''package whatever #do not write package name here '''
def isPowerOfThree(n):
    if (n == 1):
        return True;
    lastDigit = n % 10;
    map =[0] * 1000;
    map[3] = 1;
    map[9] = 2;
    map[7] = 3;
    map[1] = 4;
 
    if (map[lastDigit] == None):
        return False;
 
    power = map[lastDigit];
    powerOfThree = pow(3, power);
    while (powerOfThree <= n):
        if (powerOfThree == n):
            return True;
        power = power + 4;
        powerOfThree = pow(3, power);
     
    return False;
 
if __name__ == '__main__':
    n = 81;
    print(isPowerOfThree(n));
    n = 91;
    print(isPowerOfThree(n));
 
# This code contributed by umadevi9616

C#

/*package whatever //do not write package name here */
using System;
using System.Collections.Generic;
 
public class GFG {
    public static bool isPowerOfThree(int n)
    {
        if (n == 1)
            return true;
        int lastDigit = n % 10;
        Dictionary<int, int> map = new Dictionary<int,int>();
        map.Add(3, 1);
        map.Add(9, 2);
        map.Add(7, 3);
        map.Add(1, 4);
 
        if (!map.ContainsValue(lastDigit))
            return false;
 
        int power = map[lastDigit];
        double powerOfThree = Math.Pow(3, power);
        while (powerOfThree <= n) {
            if (powerOfThree == n)
                return true;
            power = power + 4;
            powerOfThree = Math.Pow(3, power);
        }
        return false;
    }
    public static void Main(String[] args)
    {
        int n = 81;
        Console.WriteLine(isPowerOfThree(n));
        n = 91;
        Console.WriteLine(isPowerOfThree(n));
    }
}
 
// This code is contributed by umadevi9616

Javascript

<script>
/*package whatever //do not write package name here */   
function isPowerOfThree(n) {
        if (n == 1)
            return true;
        var lastDigit = n % 10;
        var map = new Map();
        map.set(3, 1);
        map.set(9, 2);
        map.set(7, 3);
        map.set(1, 4);
 
        if (map.get(lastDigit) == null)
            return false;
 
        var power = map.get(lastDigit);
        var powerOfThree = Math.pow(3, power);
        while (powerOfThree <= n) {
            if (powerOfThree == n)
                return true;
            power = power + 4;
            powerOfThree = Math.pow(3, power);
        }
        return false;
    }
 
    // Driver code
        var n = 81;
        document.write(isPowerOfThree(n)+"<br/>");
        n = 91;
        document.write(isPowerOfThree(n));
 
// This code is contributed by umadevi9616
</script>
Producción

true
false

Análisis:

Complejidad del tiempo de ejecución:

O(1): dado que el número dado es un número entero, puede ser como máximo 2147483647 (32 bits) y la potencia más alta de tres que es menor o igual a este número es 3^19 = 1162261467. Y dado que incrementamos el potencia por 4, tendremos un bucle ejecutándose como máximo 5 veces, por lo tanto, O (1).

Complejidad espacial:

O(1): Dado que solo tenemos 4 entradas en un Mapa, no importa cuán grande sea el número que se nos dé.

Este enfoque es aportado por Durgesh Valecha.

Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@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 *