Open In App

Count primes less than number formed by replacing digits of Array sum with prime count till the digit

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array arr[] of size N having only positive elements, the task is to find the number of primes less than the number formed after following the below operations:

  • Add all elements of the given array, say sum
  • Replace every digit of the sum with the total number of prime numbers occurring between 0 and that digit.

Examples:

Input: N = 5, arr[] = {7, 12, 9, 27, 1}
Output: 11
Explanation: Sum of all element is 56. 
The prime numbers between [0, 5] and [0, 6] are 3, which are (2, 3, 5). 
So, the new number becomes 33. 
Now the total prime numbers between [0, 33] are11. 
So the final answer will be 11.

Input: N = 4, arr[] = {1, 2, 3, 4}
Output: 0

 

Algorithm: This is a simple implementation based problem. The idea is to perform the operations one by one as mentioned and finally count the number of primes.

Follow the steps mentioned below to solve the problem.

  • Find the total sum of the given array.
  • Convert the sum into a string, say S.
  • Iterate over the string and replace each character with the number of primes between 0 and that character.
  • Convert the newly formed string into an integer Y. 
  • Count the total number of prime between 0 to Y and return it.

Below is the implementation of the above approach.

C++




// C++ code to implement the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check prime
bool checkPrime(int numberToCheck)
{
    if (numberToCheck == 1
        || numberToCheck == 0) {
        return false;
    }
    for (int i = 2; i * i <= numberToCheck;
         i++) {
        if (numberToCheck % i == 0) {
            return false;
        }
    }
    return true;
}
 
// Function to calculate total prime numbers
// between 0 to r
int totalprime(int r)
{
    // Count the number of primes
    int count = 0;
    for (int i = r; i >= 0; i--) {
        count += checkPrime(i);
    }
    return count;
}
 
// Function to find required count of primes
int findNum(int arr[], int n)
{
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += arr[i];
    }
 
    // Converting sum to string
    string s = to_string(sum);
 
    // Calculating total prime numbers:
    for (int i = 0; i < s.length(); i++) {
        s[i] = totalprime(s[i] - '0') + '0';
    }
 
    // Converting newly formed string s
    // to integer.
    int y = stoi(s);
    return totalprime(y);
}
 
// Driver's code
int main()
{
    int arr[] = { 7, 12, 9, 27, 1 };
    int N = 5, sum = 0;
 
    // Function call
    cout << findNum(arr, N);
    return 0;
}


Java




// Java code to implement the approach
import java.io.*;
import java.util.*;
 
class GFG
{
   
  // Function to check prime
  public static boolean checkPrime(int numberToCheck)
  {
    if (numberToCheck == 1 || numberToCheck == 0) {
      return false;
    }
    for (int i = 2; i * i <= numberToCheck; i++) {
      if (numberToCheck % i == 0) {
        return false;
      }
    }
    return true;
  }
 
  // Function to calculate total prime numbers
  // between 0 to r
  public static int totalprime(int r)
  {
     
    // Count the number of primes
    int count = 0;
    for (int i = r; i >= 0; i--) {
      if (checkPrime(i) == true)
        count += 1;
    }
    return count;
  }
 
  // Function to find required count of primes
  public static int findNum(int arr[], int n)
  {
    int sum = 0;
    for (int i = 0; i < n; i++) {
      sum += arr[i];
    }
 
    // Converting sum to string
    StringBuilder s
      = new StringBuilder(Integer.toString(sum));
 
    // Calculating total prime numbers:
    for (int i = 0; i < s.length(); i++) {
      s.setCharAt(i,
                  (char)(totalprime(s.charAt(i) - '0')
                         + '0'));
    }
 
    // Converting newly formed string s
    // to integer.
    int y = Integer.parseInt(s.toString());
    return totalprime(y);
  }
  public static void main(String[] args)
  {
    int arr[] = { 7, 12, 9, 27, 1 };
    int N = 5, sum = 0;
 
    // Function call
    System.out.print(findNum(arr, N));
  }
}
 
// This code is contributed by Rohit Pradhan


Python3




# Python code to implement the approach
 
# Function to check prime
def checkPrime(numberToCheck):
    if (numberToCheck == 1 or numberToCheck == 0):
        return False
    i = 2
    while(i * i <= numberToCheck):
        if (numberToCheck % i == 0):
            return False
        i += 1
    return True
 
# Function to calculate total prime numbers
# between 0 to r
def totalprime(r):
   
    # Count the number of primes
    count = 0
    for i in range(r,-1,-1):
        count += checkPrime(i)
    return count
 
# Function to find required count of primes
def findNum(arr, n):
    sum = 0
    for i in range(n):
        sum += arr[i]
 
    # Converting sum to string
    s = str(sum)
 
    # Calculating total prime numbers:
    for i in range(len(s)):
        s = s.replace(s[i],chr(totalprime(ord(s[i]) - ord('0')) + ord('0')))
 
    # Converting newly formed string s
    # to integer.
    y = int(s)
    return totalprime(y)
 
# Driver's code
arr = [ 7, 12, 9, 27, 1 ]
N,sum = 5,0
 
# Function call
print(findNum(arr, N))
 
# This code is contributed by shinjanpatra


C#




// C# code to implement the approach
using System;
 
public class GFG
{
   
  // Function to check prime
  public static bool checkPrime(int numberToCheck)
  {
    if (numberToCheck == 1 || numberToCheck == 0) {
      return false;
    }
    for (int i = 2; i * i <= numberToCheck; i++) {
      if (numberToCheck % i == 0) {
        return false;
      }
    }
    return true;
  }
 
  // Function to calculate total prime numbers
  // between 0 to r
  public static int totalprime(int r)
  {
     
    // Count the number of primes
    int count = 0;
    for (int i = r; i >= 0; i--) {
      if (checkPrime(i) == true)
        count += 1;
    }
    return count;
  }
 
  // Function to find required count of primes
  public static int findNum(int []arr, int n)
  {
    int sum = 0;
    for (int i = 0; i < n; i++) {
      sum += arr[i];
    }
 
    // Converting sum to string
    String s
      = Convert. ToString(sum) ;
 
    // Calculating total prime numbers:
    for (int i = 0; i < s.Length; i++) {
        s = s.Substring(0,i)+(char)(totalprime(s[i] - '0')
                         + '0')+s.Substring(i+1);
    }
 
    // Converting newly formed string s
    // to integer.
    int y = Int32.Parse(s);
    return totalprime(y);
  }
  public static void Main(String[] args)
  {
    int []arr = { 7, 12, 9, 27, 1 };
    int N = 5, sum = 0;
 
    // Function call
    Console.Write(findNum(arr, N));
  }
}
 
// This code contributed by shikhasingrajput


Javascript




//JavaScript code to implement the approach
 
// Function to check prime
function checkPrime(numberToCheck)
{
    if (numberToCheck == 1 || numberToCheck == 0)
        return false;
    var i = 2;
    while(i * i <= numberToCheck)
    {
        if (numberToCheck % i == 0)
            return false;
        i += 1;
    }
    return true;
}
 
// Function to calculate total prime numbers
// between 0 to r
function totalprime(r)
{
   
    // Count the number of primes
    var count = 0;
    for (var i = r; i > -1; i--)
        count += checkPrime(i);
    return count;
}
 
 
// Function to find required count of primes
function findNum(arr, n)
{
    var sum = 0;
    for (var i = 0; i < n; i++)
        sum += arr[i];
 
    // Converting sum to string
    var s = sum.toString().split("");
 
    // Calculating total prime numbers:
    for (var i = 0; i < s.length; i++)
        s[i] = totalprime(Number(s[i]));
 
    // Converting newly formed string s
    // to integer.
    var y = Number(s.join(""));
    return totalprime(y);
}
 
// Driver's code
var arr = [ 7, 12, 9, 27, 1 ];
var N = 5;
 
// Function call
console.log(findNum(arr, N));
 
// This code is contributed by phasing17


Output

11

Time Complexity: O(N*sqrt(R))
Auxiliary Space: O(log(R))



Last Updated : 16 May, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads