# Find the highest occurring digit in prime numbers in a range

• Difficulty Level : Easy
• Last Updated : 01 Sep, 2021

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++

 `// C++ program to find the highest occurring digit``// in prime numbers in a range L to R.``#include``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

 `// 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

 `# 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#

 `// 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

 ``

## Javascript

 ``

Output:

`1`

This article is contributed by >Anuj Chauhan(anuj0503). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.