Número de Münchhausen

Dado un número N, genera todos los números de Munchhausen del 1 al n.
Introducción: Un número de Münchhausen es un número igual a la suma de sus dígitos elevados a la potencia de cada dígito. Es similar a la del Número Narcisista .

Por ejemplo: 
3435 = 3 3 + 4 4 + 3 3 + 5 5
Uno también puede ser considerado como Número de Münchhausen porque cuando 1 elevado a la potencia 1 es 1 mismo.
Dado que el número 3435 se puede expresar como la suma de cada dígito del número cuando cada dígito de los números se eleva a una potencia equivalente a los dígitos mismos, es decir, ((3 elevado a la potencia 3) + (4 elevado a la potencia 4 ) + (3 elevado a la potencia 3) + (5 elevado a la potencia 5)) dará salida al mismo número, es decir, 3435, entonces el número puede llamarse Número de Münchhausen.

Ejemplo: 

Input : 500
Output : 1
One is the only Münchhausen Number smaller
than or equal to 500.

Input : 5000
Output : 1  3435
1 and 3435 are the only Münchhausen Numbers smaller
than or equal to 5000.

Precalculamos i elevado a i para cada dígito posible i donde i varía de 0 a 9. Después de precalcular estos valores, recorremos todos los dígitos de cada número menor que n y calculamos la suma del dígito elevado a dígito de potencia.

C++

// C++ code for Münchhausen Number
#include <bits/stdc++.h>
using namespace std;
 
// pwr[i] is going to store i raised to
// power i.
unsigned pwr[10];
 
// Function to check out whether
// the number is Münchhausen
// Number or not
bool isMunchhausen(unsigned n) {
    unsigned sum = 0;
    int temp = n;
 
    while (temp) {
        sum += pwr[(temp % 10)];
        temp /= 10;
    }
 
    return (sum == n);
}
 
void printMunchhausenNumbers(int n)
{
    // Precompute i raised to power i for every i
    for (int i = 0; i < 10; i++ )
        pwr[i] = (unsigned)pow( (float)i, (float)i );
     
    // The input here is fixed i.e. it will
    // check up to n
    for (unsigned i = 1; i <= n; i++)
 
        // check the integer for Münchhausen Number,
        // if yes then print out the number
        if (isMunchhausen(i))
            cout << i << "\n";
}
 
// Driver Code
int main() {
    int n = 10000;
    printMunchhausenNumbers(n);
    return 0;
}

Java

// Java code for Munchhausen Number
 
import java.io.*;
import java.util.*;
 
class GFG {
// pwr[i] is going to store i raised to
// power i.
static long[] pwr;
  
// Function to check out whether
// the number is Munchhausen
// Number or not
static Boolean isMunchhausen(int n) {
    long sum = 0l;
    int temp = n;
  
    while (temp>0) {
        int index= temp%10;
        sum =sum + pwr[index];
        temp /= 10;
    }
  
    return (sum == n);
}
  
static void printMunchhausenNumbers(int n)
{
    pwr= new long[10];
 
    // Precompute i raised to
    // power i for every i
    for (int i = 0; i < 10; i++ )
        pwr[i] = (long)Math.pow( (float)i, (float)i );
      
    // The input here is fixed i.e. it will
    // check up to n
    for (int i = 1; i <= n; i++)
  
        // check the integer for Munchhausen Number,
        // if yes then print out the number
        if (isMunchhausen(i)==true)
            System.out.println(i );
}
    public static void main (String[] args) {
    int n = 10000;
    printMunchhausenNumbers(n);
     }
}
// This code is contributed by Gitanjali.

Python3

# Python 3 code for
# Münchhausen Number
import math
 
# pwr[i] is going to
# store i raised to
# power i.
pwr = [0] * 10
 
# Function to check out
# whether the number is
# Münchhausen Number or
# not
def isMunchhausen(n) :
 
    sm = 0
    temp = n
 
    while (temp) :
        sm= sm + pwr[(temp % 10)]
        temp = temp // 10
     
    return (sm == n)
 
def printMunchhausenNumbers(n) :
 
    # Precompute i raised to
    # power i for every i
    for i in range(0, 10) :
        pwr[i] = math.pow((float)(i), (float)(i))
     
    # The input here is fixed
    # i.e. it will check up to n
    for i in range(1,n+1) :
         
        # check the integer for
        # Münchhausen Number, if
        # yes then print out the
        # number
        if (isMunchhausen(i)) :
            print( i )
 
 
# Driver Code
n = 10000
printMunchhausenNumbers(n)
 
# This code is contributed by Nikita Tiwari.

C#

// C# code for Munchhausen Number
using System;
 
class GFG {
 
    // pwr[i] is going to store i
    // raised to power i.
    static long[] pwr;
 
    // Function to check out whether
    // the number is Munchhausen
    // Number or not
    static bool isMunchhausen(int n)
    {
        long sum = 0;
        int temp = n;
 
        while (temp > 0) {
            int index = temp % 10;
            sum = sum + pwr[index];
            temp /= 10;
        }
 
        return (sum == n);
    }
 
    static void printMunchhausenNumbers(int n)
    {
        pwr = new long[10];
 
        // Precompute i raised to
        // power i for every i
        for (int i = 0; i < 10; i++)
            pwr[i] = (long)Math.Pow((float)i, (float)i);
 
        // The input here is fixed i.e.
        // it will check up to n
        for (int i = 1; i <= n; i++)
 
            // check the integer for Munchhausen Number,
            // if yes then print out the number
            if (isMunchhausen(i) == true)
                Console.WriteLine(i);
    }
     
    // Driver Code
    public static void Main()
    {
        int n = 10000;
        printMunchhausenNumbers(n);
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// PHP code for Münchhausen Number
 
// pwr[i] is going to store i raised
// to power i.
$pwr = array_fill(0, 10, 0);
 
// Function to check out whether the
// number is Münchhausen Number or not
function isMunchhausen($n)
{
    global $pwr;
    $sm = 0;
    $temp = $n;
 
    while ($temp)
    {
        $sm= $sm + $pwr[($temp % 10)];
        $temp = (int)($temp / 10);
    }
    return ($sm == $n);
}
 
function printMunchhausenNumbers($n)
{
    global $pwr;
     
    // Precompute i raised to power
    // i for every i
    for ($i = 0; $i < 10; $i++)
        $pwr[$i] = pow((float)($i), (float)($i));
     
    // The input here is fixed i.e. it
    // will check up to n
    for ($i = 1; $i < $n + 1; $i++)
         
        // check the integer for Münchhausen
        // Number, if yes then print out the
        // number
        if (isMunchhausen($i))
            print($i . "\n");
}
 
// Driver Code
$n = 10000;
printMunchhausenNumbers($n);
 
// This code is contributed by mits
?>

Javascript

<script>
 
// Javascript code for Munchhausen Number
// pwr[i] is going to store i raised to
 
// power i.
var pwr;
  
// Function to check out whether
// the number is Munchhausen
// Number or not
function isMunchhausen(n)
{
    var sum = 0;
    var temp = n;
  
    while (temp > 0)
    {
        var index= temp % 10;
        sum =sum + pwr[index];
        temp = parseInt(temp / 10);
    }
    return (sum == n);
}
  
function printMunchhausenNumbers(n)
{
    pwr = Array.from({length: 10}, (_, i) => 0);
 
    // Precompute i raised to
    // power i for every i
    for(var i = 0; i < 10; i++)
        pwr[i] = Math.pow(i, i);
      
    // The input here is fixed i.e. it will
    // check up to n
    for(var i = 1; i <= n; i++)
  
        // check the integer for Munchhausen Number,
        // if yes then print out the number
        if (isMunchhausen(i) == true)
            document.write(i + "<br>");
}
 
// Driver code
var n = 10000;
 
printMunchhausenNumbers(n);
 
// This code is contributed by Princi Singh
 
</script>

Producción: 

1
3435

Complejidad de tiempo : O(n logn) n for outside for loop y log n for while loop en la función isMunchhausen

Nota: si se adopta la definición 0^0 = 0, entonces hay exactamente cuatro números de Münchhausen: 0, 1, 3435 y 438579088 [Fuente: MathWorld ]
 

Publicación traducida automáticamente

Artículo escrito por Subhajit Saha 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 *