Número de Woodall

Un número de Woodall es de la forma:
 

W n = n.2 n – 1

Los primeros números de Woodall son: 1, 7, 23, 63, 159, 383, 895……
Dado un número X. La tarea es verificar si X es el número de woodall o no.
Ejemplos: 
 

Input : X = 383
Output : Yes
For n = 6, Wn = n.2n - 1 = 383.

Input : X = 200
Output : No
  1. Podemos observar que todos los números de Woodall son impares. Entonces, antes que nada, verificamos si el número dado es impar o no.
  2. Ahora, para verificar si el número es woodall o no, incrementa el número dado en 1 y ahora divide el número entre 2 hasta que sea par y cuenta el número de veces que es divisible. Y en cada punto verifique si el conteo es igual al número o no.

A continuación se muestra la implementación de este enfoque: 
 

C++

// CPP program to check if a number is
// Woodall or not.
#include <bits/stdc++.h>
using namespace std;
 
bool isWoodall(int x)
{
    // If number is even, return false.
    if (x % 2  == 0)
        return false;
 
    // If x is 1, return true.
    if (x == 1)
        return true;
     
    x++;  // Add 1 to make x even
 
    // While x is divisible by 2
    int p = 0;
    while (x % 2 == 0) {
 
        // Divide x by 2
        x = x/2;
 
        // Count the power
        p++;
 
        // If at any point power and
        // x became equal, return true.
        if (p == x)
            return true;
    }
 
    return false;
}
 
// Driven Program
int main()
{
    int x = 383;
 
    (isWoodall(x)) ? (cout << "Yes" << endl) :
                     (cout << "No" << endl);
    return 0;
}

Java

// JAVA program to check if a number
// is Woodall or not.
class GFG {
     
    static boolean isWoodall(int x)
    {
        // If number is even, return false.
        if (x % 2  == 0)
            return false;
      
        // If x is 1, return true.
        if (x == 1)
            return true;
          
        x++;  // Add 1 to make x even
      
        // While x is divisible by 2
        int p = 0;
        while (x % 2 == 0) {
      
            // Divide x by 2
            x = x / 2;
      
            // Count the power
            p++;
      
            // If at any point power and
            // x became equal, return true.
            if (p == x)
                return true;
        }
      
        return false;
    }
      
    // Driven Program
    public static void main(String args[])
    {
        int x = 383;
      
        if(isWoodall(x))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
/*This code is contributed by Nikita Tiwari.*/

Python

# Python program to check if a number
# is Woodall or not.
 
def isWoodall(x) :
     
    # If number is even, return false.
    if (x % 2  == 0) :
        return False
  
    # If x is 1, return true.
    if (x == 1) :
        return True
      
    x = x + 1  # Add 1 to make x even
  
    # While x is divisible by 2
    p = 0
    while (x % 2 == 0) :
         
        # Divide x by 2
        x = x/2
  
        # Count the power
        p = p + 1
  
        # If at any point power and
        # x became equal, return true.
        if (p == x) :
            return True
         
    return False
     
  
# Driven Program
x = 383
if(isWoodall(x)) :
    print "Yes"
else  :
    print "No"
     
# This code is contributed by Nikita Tiwari.

C#

// C# program to check if a number
// is Woodall or not.
using System;
 
class GFG {
     
    static bool isWoodall(int x)
    {
        // If number is even, return false.
        if (x % 2 == 0)
            return false;
     
        // If x is 1, return true.
        if (x == 1)
            return true;
         
        x++; // Add 1 to make x even
     
        // While x is divisible by 2
        int p = 0;
        while (x % 2 == 0) {
     
            // Divide x by 2
            x = x / 2;
     
            // Count the power
            p++;
     
            // If at any point power and
            // x became equal, return true.
            if (p == x)
                return true;
        }
     
        return false;
    }
     
    // Driver Code
    public static void Main()
    {
        int x = 383;
     
        if(isWoodall(x))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by Nikita Tiwari.

PHP

<?php
// PHP program to check
// if a number is
// Woodall or not.
 
function isWoodall($x)
{
     
    // If number is even,
    // return false.
    if ($x % 2 == 0)
        return false;
 
    // If x is 1,
    // return true.
    if ($x == 1)
        return true;
         
    // Add 1 to
    // make x even
    $x++;
 
    // While x is
    // divisible by 2
    $p = 0;
    while ($x % 2 == 0)
    {
 
        // Divide x by 2
        $x = $x/2;
 
        // Count the power
        $p++;
 
        // If at any point power and
        // x became equal, return true.
        if ($p == $x)
            return true;
    }
 
    return false;
}
 
    // Driver Code
    $x = 383;
 
    if(isWoodall($x))
    echo "Yes" ;
    else
    echo "No" ;
     
// This code is contributed by anuj_67.
?>

Javascript

<script>
// Javascript program to check
// if a number is
// Woodall or not.
 
function isWoodall(x)
{
     
    // If number is even,
    // return false.
    if (x % 2 == 0)
        return false;
 
    // If x is 1,
    // return true.
    if (x == 1)
        return true;
         
    // Add 1 to
    // make x even
    x++;
 
    // While x is
    // divisible by 2
    let p = 0;
    while (x % 2 == 0)
    {
 
        // Divide x by 2
        x = x/2;
 
        // Count the power
        p++;
 
        // If at any point power and
        // x became equal, return true.
        if (p == x)
            return true;
    }
 
    return false;
}
 
    // Driver Code
    let x = 383;
 
    if(isWoodall(x))
    document.write("Yes") ;
    else
    document.write("No") ;
     
// This code is contributed by _saurabh_jaiswal
</script>

Producción: 
 

Yes

Complejidad de tiempo: O (log n) ya que while loop se ejecutará para log n veces

Este artículo es una contribución de Anuj Chauhan . 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 *