# Munchausen Number

#### Algorithms List of Mathematical Algorithms

Get FREE domain for 1st year and build your brand new site

A number that is equal to the sum of its digits each raised to the power equal to its digit is a Munchausen Number or perfect digit-to-digit invariant(PDDI).

For example :

1.In above example each digit raised to itself on addition equals to number itself.

2.Another number which exhibits this property is 1 .

## Pseudocode

So a simple algorithm for identification of Munchausen Number is as follows:

• For a given input number break it into constituent digits.
• Find the sum of each of its digits raised to itself.
• If it is equal to the original number,then it is the required Munchausen number.

## Implementation

For example let's try to find if a number is a Munchausen number or not?
We make use of our psudeo code for breaking the problem.

The Cpp implementation is as follows :

#include<bits/stdc++.h>
using namespace std;
int pwr[10]; //global variable
bool isMunchausen(int n) {
//Precomputing i raised to power i for every i (0-9)
for (int i = 0; i <= 9; i++ )
{
pwr[i] = pow( i,i );
}
int sum = 0;
int temp = n;
while (temp)
{
sum =sum + pwr[(temp % 10)];
temp =temp/10;
}
return (sum == n);
}
int main() {
int n=1000;

if(isMunchausen(n))//function call
{cout<<"YES"<<endl;}
else
{cout<<"NO"<<endl;}
return 0;
}


## Output

NO


Ex 2 : Now let's try to find over a range of numbers
We extend the same approach used over a set of numbers to get the desired result .
The Cpp implementation of it is as follows:

#include <bits/stdc++.h>
using namespace std;
int pwr[10]; //global variable for accessing the values
void printNumbers(int n)
{
//Precomputing i raised to power i for every i (0-9)
for (int i = 0; i <= 9; i++ )
{
pwr[i] = pow( i,i );}
// checking up to n
for (int i = 1; i <= n; i++)
{
if (isMunchausen(i))
cout << i << "\n"; //if true prints the number
}
}
bool isMunchausen(int n) {
int sum = 0;
int temp = n;

while (temp) {
sum =sum + pwr[(temp % 10)]; //Adding the units digit to the count
temp =temp/10; //Breaking the number for next higher power extraction
}
return (sum == n);
}

int main() {
int n = 10000; //change here for computing other numbers
printNumbers(n);
return 0;
}


## Output

1
3435


In above examples 0^0=0 is considered.

# Conclusions :

There are a very few numbers greater than zero which are Munchausen numbers or PDDI like 1 , 3435 and 438579088. The gap widens so on so forth from our observation.