Open In App

Find the highest occurring digit in prime numbers in a range

Given a range L to R, the task is to find the highest occurring digit in prime numbers lie between L and R (both inclusive). If multiple digits have the same highest frequency print the largest of them. If no prime number occurs between L and R, output -1.
Examples: 
 

Input : L = 1 and R = 20.
Output : 1
Prime number between 1 and 20 are 2, 3, 5, 7, 11, 13, 17, 19.
1 occur maximum i.e 5 times among 0 to 9.

 



The idea is to start from L to R, check if the number is prime or not. If prime then increment the frequency of digits (using array) present in the prime number. To check if the number is prime or not we can use the Sieve of Eratosthenes.
Below is the implementation of this approach:
 




// C++ program to find the highest occurring digit
// in prime numbers in a range L to R.
#include<bits/stdc++.h>
using namespace std;
 
// Sieve of Eratosthenes
void sieve(bool prime[], int n)
{
      prime[0] = prime[1] = true;
    for (int p = 2; p * p  <= n; p++)
    {
        if (prime[p] == false)
            for (int i = p*2; i <= n; i+=p)
                prime[i] = true;
    }
}
 
// Returns maximum occurring digits in primes
// from l to r.
int maxDigitInPrimes(int L, int R)
{
    bool prime[R+1];
    memset(prime, 0, sizeof(prime));
 
    // Finding the prime number up to R.
    sieve(prime, R);
 
    // Initialise frequency of all digit to 0.
    int freq[10] = { 0 };
    int val;
 
    // For all number between L to R, check if prime
    // or not. If prime, incrementing the frequency
    // of digits present in the prime number.
    for (int i = L; i <= R; i++)
    {
        if (!prime[i])
        {
            int p = i; // If i is prime
            while (p)
            {
                freq[p%10]++;
                p /= 10;
            }
        }
    }
 
    // Finding digit with highest frequency.
    int max = freq[0], ans = 0;
    for (int j = 1; j < 10; j++)
    {
        if (max <= freq[j])
        {
            max = freq[j];
            ans = j;
        }
    }
 
    return (max != 0)? ans: -1;
}
 
// Driven Program
int main()
{
    int L = 1, R = 20;
 
    cout << maxDigitInPrimes(L, R) << endl;
    return 0;
}




// Java program to find the highest occurring digit
// in prime numbers in a range L to R.
import java.util.Arrays;
 
class GFG {
     
    // Sieve of Eratosthenes
    static void sieve(boolean prime[], int n) {
 
        for (int p = 2; p * p <= n; p++) {
            if (prime[p] == false)
                for (int i = p * 2; i <= n; i += p)
                    prime[i] = true;
        }
    }
     
    // Returns maximum occurring digits in primes
    // from l to r.
    static int maxDigitInPrimes(int L, int R) {
 
        boolean prime[] = new boolean[R + 1];
        Arrays.fill(prime, false);
     
        // Finding the prime number up to R.
        sieve(prime, R);
     
        // Initialise frequency of all digit to 0.
        int freq[] = new int[10];
        int val;
     
        // For all number between L to R, check if
        // prime or not. If prime, incrementing
        // the frequency of digits present in the
        // prime number.
        for (int i = L; i <= R; i++) {
 
            if (!prime[i]) {
                int p = i; // If i is prime
 
                while (p > 0) {
                freq[p % 10]++;
                p /= 10;
                }
            }
        }
     
        // Finding digit with highest frequency.
        int max = freq[0], ans = 0;
 
        for (int j = 1; j < 10; j++) {
            if (max <= freq[j]) {
                max = freq[j];
                ans = j;
            }
        }
     
        return (max != 0) ? ans : -1;
    }
     
    // Driver code
    public static void main(String[] args) {
        int L = 1, R = 20;
        System.out.println(maxDigitInPrimes(L, R));
    }
}
 
// This code is contributed by Anant Agarwal.




# Python 3 program to find the highest
# occurring digit in prime numbers
# in a range L to R.
 
# Sieve of Eratosthenes
def sieve(prime, n):
    p = 2
    while p * p <= n :
        if (prime[p] == False):
            for i in range(p * 2, n, p):
                prime[i] = True
                 
        p += 1
 
# Returns maximum occurring digits
# in primes from l to r.
def maxDigitInPrimes(L, R):
 
    prime = [0] * (R + 1)
 
    # Finding the prime number up to R.
    sieve(prime, R)
 
    # Initialise frequency of all
    # digit to 0.
    freq = [0] * 10
 
    # For all number between L to R,
    # check if prime or not. If prime,
    # incrementing the frequency
    # of digits present in the prime number.
    for i in range(L, R + 1):
        if (not prime[i]):
            p = i # If i is prime
            while (p):
                freq[p % 10] += 1
                p //= 10
 
    # Finding digit with highest frequency.
    max = freq[0]
    ans = 0
    for j in range(1, 10):
        if (max <= freq[j]):
            max = freq[j]
            ans = j
    if max == 0
    return -1
    return ans
 
# Driver Code
if __name__=="__main__":
     
    L = 1
    R = 20
 
    print(maxDigitInPrimes(L, R))
 
# This code is contributed by ita_c




// C# program to find the highest
// occurring digit in prime numbers
// in a range L to R.
using System;
 
class GFG {
     
    // Sieve of Eratosthenes
    static void sieve(bool []prime, int n)
    {
        for (int p = 2; p * p <= n; p++)
        {
            if (prime[p] == false)
                for (int i = p * 2; i <= n; i += p)
                    prime[i] = true;
        }
    }
     
    // Returns maximum occurring digits
    // in primes from l to r.
    static int maxDigitInPrimes(int L, int R) {
 
        bool []prime = new bool[R + 1];
        for(int i = 0; i < R+1; i++)
        prime[i] = false;
 
        // Finding the prime number up to R.
        sieve(prime, R);
     
        // Initialise frequency of all digit to 0.
        int []freq = new int[10];
     
     
        // For all number between L to R, check if
        // prime or not. If prime, incrementing
        // the frequency of digits present in the
        // prime number.
        for (int i = L; i <= R; i++) {
 
            if (!prime[i])
            {
                int p = i; // If i is prime
 
                while (p > 0) {
                freq[p % 10]++;
                p /= 10;
                }
            }
        }
     
        // Finding digit with highest frequency.
        int max = freq[0], ans = 0;
 
        for (int j = 1; j < 10; j++)
        {
            if (max <= freq[j]) {
                max = freq[j];
                ans = j;
            }
        }
        return (max != 0) ? ans : -1;
    }
     
    // Driver code
    public static void Main()
    {
        int L = 1, R = 20;
        Console.Write(maxDigitInPrimes(L, R));
    }
}
 
// This code is contributed by nitin mittal.




<?php
// PHP program to find the highest occurring
// digit in prime numbers in a range L to R.
 
// Sieve of Eratosthenes
function sieve(&$prime, $n)
{
    for ($p = 2; $p * $p <= $n; $p++)
    {
        if ($prime[$p] == false)
            for ($i = $p * 2;
                 $i <= $n; $i += $p)
                $prime[$i] = true;
    }
}
 
// Returns maximum occurring digits
// in primes from l to r.
function maxDigitInPrimes($L, $R)
{
    $prime = array_fill(0, $R + 1, false);
 
    // Finding the prime number up to R.
    sieve($prime, $R);
 
    // Initialise frequency of all digit to 0.
    $freq = array_fill(0, 10, 0);
 
    // For all number between L to R, check
    // if prime or not. If prime, incrementing
    // the frequency of digits present in the
    // prime number.
    for ($i = $L; $i <= $R; $i++)
    {
        if (!$prime[$i])
        {
            $p = $i; // If i is prime
            while ($p)
            {
                $freq[$p % 10]++;
                $p = (int)($p / 10);
            }
        }
    }
 
    // Finding digit with highest frequency.
    $max = $freq[0];
    $ans = 0;
    for ($j = 1; $j < 10; $j++)
    {
        if ($max <= $freq[$j])
        {
            $max = $freq[$j];
            $ans = $j;
        }
    }
 
    return $ans;
}
 
// Driver Code
$L = 1;
$R = 20;
 
echo maxDigitInPrimes($L, $R);
 
// This code is contributed by mits
?>




<script>
 
// Javascript program to find
// the highest occurring digit
// in prime numbers in a range L to R.
     
    // Sieve of Eratosthenes
    function sieve(prime,n)
    {
        for (let p = 2; p * p <= n; p++) {
            if (prime[p] == false)
                for (let i = p * 2; i <= n; i += p)
                    prime[i] = true;
        }
    }
     
     // Returns maximum occurring digits in primes
    // from l to r.
    function maxDigitInPrimes(L,R)
    {
        let prime=new Array(R+1);
        for(let i=0;i<R+1;i++)
        {
            prime[i]=false;
        }
        // Finding the prime number up to R.
        sieve(prime, R);
         
        let freq=new Array(10);
        for(let i=0;i<10;i++)
        {
            freq[i]=0;
        }
        let val;
        // For all number between L to R, check if
        // prime or not. If prime, incrementing
        // the frequency of digits present in the
        // prime number.
        for (let i = L; i <= R; i++) {
   
            if (!prime[i]) {
                let p = i; // If i is prime
   
                while (p > 0) {
                freq[p % 10]++;
                p = Math.floor(p/10);
                }
            }
        }
       
        // Finding digit with highest frequency.
        let max = freq[0], ans = 0;
   
        for (let j = 1; j < 10; j++) {
            if (max <= freq[j]) {
                max = freq[j];
                ans = j;
            }
        }
       
        return ans;
    }
     
    // Driver code
    let  L = 1, R = 20;
    document.write(maxDigitInPrimes(L, R));
     
    // This code is contributed by avanitrachhadiya2155
     
</script>

Output: 



1

 


Article Tags :