Count prime numbers in range [L, R] whose single digit sum is also prime

• Last Updated : 19 Jan, 2022

Given two integers L and R. The task is to count the prime numbers in the range [L, R], whose single sum is also a prime number.
A single sum is obtained by adding the digits of a number until a single digit is left.

Examples

Input: L = 5, R = 20
Output: 3
Explanation: Prime numbers in the range L = 5 to R = 20 are {5, 7, 11, 13, 17, 19}
Their “single sum” of digits is {5, 7, 2, 4, 8, 1}.
Only {5, 7, 2} are prime. Hence the answer is 3.

Input: L = 1, R = 10
Output: 4
Explanation: Prime numbers in the range L = 1 to R = 10 are {2, 3, 5, 7}.
Their “single sum” of digits is {2, 3, 5, 7}.
Since all the numbers are prime, hence the answer is 4.

Approach:  The naive approach is to iterate for each number in the range [L, R] and check if the number is prime or not. If the number is prime, find the single sum of its digits and again check whether the single sum is prime or not. If the single sum is prime, then increment the counter and print the current element in the range [L, R].

Below is the implementation of the above approach.

C++14

 `// C++ program for above approach``#include ``using` `namespace` `std;` `// Function to check whether number``// is prime or not``bool` `isPrime(``int` `n)``{``    ``// Corner case``    ``if` `(n <= 1)``        ``return` `false``;` `    ``// Check from 2 to square root of n``    ``for` `(``int` `i = 2; i <= ``sqrt``(n); i++)``        ``if` `(n % i == 0)``            ``return` `false``;` `    ``return` `true``;``}` `// Function to find single digit sum``int` `SingleDigitSum(``int``& n)``{``    ``if` `(n <= 9)``        ``return` `n;``    ``return` `(n % 9 == 0) ? 9 : n % 9;``}` `// Function to find single digit primes``int` `countSingleDigitPrimes(``int` `l, ``int` `r)``{``    ``int` `count = 0, i;` `    ``for` `(i = l; i <= r; i++) {``        ``if` `(isPrime(i)``            ``&& isPrime(SingleDigitSum(i))) {``            ``count++;``        ``}``    ``}``    ``return` `count;``}` `// Driver Code``int` `main()``{``    ``// Input range``    ``int` `L = 1, R = 10;` `    ``// Function Call``    ``cout << countSingleDigitPrimes(L, R);` `    ``return` `0;``}`

Java

 `// Java program to implement``// the above approach``class` `GFG``{` `  ``// Function to check whether number``  ``// is prime or not``  ``static` `boolean` `isPrime(``int` `n)``  ``{` `    ``// Corner case``    ``if` `(n <= ``1``)``      ``return` `false``;` `    ``// Check from 2 to square root of n``    ``for` `(``int` `i = ``2``; i <= Math.sqrt(n); i++)``      ``if` `(n % i == ``0``)``        ``return` `false``;` `    ``return` `true``;``  ``}` `  ``// Function to find single digit sum``  ``static` `int` `SingleDigitSum(``int` `n)``  ``{``    ``if` `(n <= ``9``)``      ``return` `n;``    ``return` `(n % ``9` `== ``0``) ? ``9` `: n % ``9``;``  ``}` `  ``// Function to find single digit primes``  ``static` `int` `countSingleDigitPrimes(``int` `l, ``int` `r)``  ``{``    ``int` `count = ``0``, i;` `    ``for` `(i = l; i <= r; i++) {``      ``if` `(isPrime(i)``          ``&& isPrime(SingleDigitSum(i))) {``        ``count++;``      ``}``    ``}``    ``return` `count;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main(String args[])``  ``{` `    ``// Input range``    ``int` `L = ``1``, R = ``10``;` `    ``// Function Call``    ``System.out.println(countSingleDigitPrimes(L, R));` `  ``}``}` `// This code is contributed by gfgking`

Python3

 `# Python program for above approach``import` `math` `# Function to check whether number``# is prime or not``def` `isPrime(n):``  ` `    ``# Corner case``    ``if` `n <``=` `1``:``        ``return` `False` `    ``# Check from 2 to square root of n``    ``for` `i ``in` `range``(``2``, math.floor(math.sqrt(n)) ``+` `1``):``        ``if` `n ``%` `i ``=``=` `0``:``            ``return` `False` `    ``return` `True` `# Function to find single digit sum``def` `SingleDigitSum(n):``    ``if` `n <``=` `9``:``        ``return` `n``    ``return` `9` `if` `(n ``%` `9` `=``=` `0``) ``else` `n ``%` `9` `# Function to find single digit primes``def` `countSingleDigitPrimes(l, r):``    ``count ``=` `0``    ``i ``=` `None` `    ``for` `i ``in` `range``(l, r ``+` `1``):``        ``if` `isPrime(i) ``and` `isPrime(SingleDigitSum(i)):``            ``count ``+``=` `1``    ``return` `count` `# Driver Code` `# Input range``L ``=` `1``R ``=` `10` `# Function Call``print``(countSingleDigitPrimes(L, R))` `# This code is contributed by gfgking`

C#

 `// C# program to implement``// the above approach``using` `System;``class` `GFG``{` `  ``// Function to check whether number``  ``// is prime or not``  ``static` `bool` `isPrime(``int` `n)``  ``{` `    ``// Corner case``    ``if` `(n <= 1)``      ``return` `false``;` `    ``// Check from 2 to square root of n``    ``for` `(``int` `i = 2; i <= Math.Sqrt(n); i++)``      ``if` `(n % i == 0)``        ``return` `false``;` `    ``return` `true``;``  ``}` `  ``// Function to find single digit sum``  ``static` `int` `SingleDigitSum(``int` `n)``  ``{``    ``if` `(n <= 9)``      ``return` `n;``    ``return` `(n % 9 == 0) ? 9 : n % 9;``  ``}` `  ``// Function to find single digit primes``  ``static` `int` `countSingleDigitPrimes(``int` `l, ``int` `r)``  ``{``    ``int` `count = 0, i;` `    ``for` `(i = l; i <= r; i++) {``      ``if` `(isPrime(i)``          ``&& isPrime(SingleDigitSum(i))) {``        ``count++;``      ``}``    ``}``    ``return` `count;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main()``  ``{` `    ``// Input range``    ``int` `L = 1, R = 10;` `    ``// Function Call``    ``Console.Write(countSingleDigitPrimes(L, R));` `  ``}``}` `// This code is contributed by Samim Hossain Mondal.`

Javascript

 ``
Output
`4`

Time Complexity: O((R – L)*N^(1/2)) where N is the prime number in the range [L, R].
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up