Equidigital Numbers In C++ - C++ Programming Tutorial
C++ Course / Miscellaneous / Equidigital Numbers In C++

Equidigital Numbers In C++

BLUF: Mastering Equidigital Numbers In C++ is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Equidigital Numbers In C++

C++ is renowned for its efficiency. Learn how Equidigital Numbers In C++ enables low-level control and high-performance computing in the tutorial below.

In this tutorial, we will explore the process of determining if a given number is Equidigital. Prior to delving into this topic, it's essential to grasp the concept of an Equidigital number.

What is the Equidigital Number?

A number with n digits is categorized as an Equidigital number if the count of digits in the prime factorization of n, taking into account powers, is equivalent to the digit count in n itself. For example, the number 16 qualifies as an Equidigital number since its prime factorization is 2 to the power of 4. Both the number 16 and its prime factorization possess two digits each (2 and 4). Conversely, for the number 128, its prime factorization as 2 to the power of 7 results in two digits (2 and 7), whereas the number 128 consists of three digits (1, 2, and 8), making it not an Equidigital number.

Solution Approach:

One potential resolution to this issue involves identifying the factors of the given number and subsequently contrasting them with the count of prime numbers having an equivalent number of digits. The identification of prime factors can be achieved through the application of the sieve method.

Algorithm:

Step 1: First, search out all prime numbers.

Step 2: Subsequently, determine the quantity of digits present in the numerical value n.

Step 3: Identify all the prime factors of the given number and determine the total count of digits in each factor.

Step 4: Now compare both the values.

If the specified condition evaluates to true, proceed to return the corresponding numerical value.

Example:

Let's consider an illustration to identify the Equidigital Numbers in C++.

Example

#include<bits/stdc++.h>
using namespace std; 
const int MAX = 10000; 
// an array for storing the prime numbers up to the max value 
vector <int> primeNumbers; 
// The Algorithm 
void sieveSundaramAlgorithm() 
{
    // This one describes the sieve of Sundaram, a tool for generating prime numbers. 
    // 2*x + 2-> where x is a given number. (2x+2) modifies then (x - 2*x -2) 
    //We want primes smaller than MAX, so we reduce MAX to half 
    // This array is used to distinguish the numbers that are written with letters. 
    //The Range 
    // i+j+2i-j from others where 1 <= i <= j is defined.
    bool markedArray[MAX/2 + 1] = {0}; 
    // Marking the non-prime numbers 
    for (int i=1; i<=(sqrt(MAX)-1)/2; i++) 
    for (int j=(i*(i+1))<<1; j<=MAX/2; j=j+2*i+1) 
    markedArray[j] = true; 
    // as 2 is prime, then push back
    primeNumbers.push_back(2); 
    // display of the other prime numbers
    for (int i=1; i<=MAX/2; i++) 
    if (markedArray[i] == false) 
    primeNumbers.push_back(2*i + 1);

} 
// the boolean condition to check 
//the number is Equidigital or nor 
bool isEquidigitalNumber(int num) {
    if (num == 1) 
    return true; 
    // to check the count of the numbers in the num 
    int original_number = num; 
    int sumOftheDigits = 0; 
    while (original_number > 0) 
    {
        sumOftheDigits++; 
        original_number = original_number/10; 
    }
        // counting the digits of the prime number 
        // the primeDigit will hold the values 
        int primeDigit = 0 , count_exponent = 0, prime; 
        for (int i = 0; primeNumbers[i] <= num/2; i++) 
        {
            // Count powers of p in n 
            while (num % primeNumbers[i] == 0)
            {
                prime = primeNumbers[i]; 
                num = num/prime;
                // Find the power of the prime numbers 
                count_exponent++;
                }
                // add the count of the digits to primeDigit 
                while (prime > 0) 
                {
                    primeDigit++; 
                    prime = prime / 10; 
                }
                    // Adding the power of digital to count-exponent     
                    while (count_exponent > 1) 
                    {
                        primeDigit++; 
                        count_exponent = count_exponent / 10; 
                    }
                } 
                //If the condition is true, the 
                //number has 1 prime factor 
                if (num != 1) 
                {
                    while (num > 0) 
                    {
                        primeDigit++; 
                        num = num/10; 
                    } 
            } 
            //If the prime factors and the initial number have the same
          // number of digits, then it returns true. 
            return (primeDigit == sumOftheDigits); 
    
} // Driver code 
int main() { 
// Finding all the prime numbers 
//in the given range 
sieveSundaramAlgorithm();
cout << "The Equidigital numbers are: \n"; 
for (int i=10; i<30; i++) 
if (isEquidigitalNumber(i))
cout << i << " ";
return 0;
}

Output:

Output

The Equidigital numbers are: 
10 13 14 16 19 21 23 25 27 29

Explanation:

The C++ code is structured around the sieve of Sundaram technique to generate prime numbers and identify equidigital numbers. Equidigital numbers are those with a digit count matching the number of their prime factors. For evaluating equidigital numbers, the isEquidigitalNumber function is provided. This function assesses the input number by iterating through prime numbers to verify the presence of factors. When a prime factor is found, it calculates the digit within the factor and aggregates them into primeDigit.

The formula involves the base raised to the power of the prime exponent. Consequently, the computation (abcd...)(r1r2r3...rN) illustrates the result of multiplying all prime factors and their corresponding occurrences until each factor is diminished to a value that is less than or equal to 1. The algorithm evaluates the outcome of primeDigit by sequentially examining and tallying all digits within the original number (sumOftheDigits). If they coincide, the number is considered equidigital, and the return value is set to true. Within the main routine, a series of prime numbers is generated, followed by the evaluation of equidigital numbers ranging from 10 to 29 using the isEquidigitalNumber procedure. Subsequently, the Equidigital numbers are displayed.

Conclusion:

In summary, the software employs the Sundaram sieve algorithm to produce prime numbers and identify equidigital numbers. Equidigital numbers are those with the same number of digits in their prime factorization as in the original number. The primary purpose of the software is to calculate and contrast the digit count and prime factors of two numbers, returning True if they match. This process aids in assessing the efficiency of prime factorization and digit enumeration in identifying Equidigital integers.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience