Count of numbers below N whose sum of prime divisors is K

Given two integers K and N, the task is to find the count of integers from the range [2, N – 1] whose sum of prime divisors is K

Example:

Input: N = 20, K = 7
Output: 2
7 and 10 are the only valid numbers.
sumPFactors(7) = 7
sumPFactors(10) = 2 + 5 = 7



Input: N = 25, K = 5
Output: 5

Approach: Create an array sumPF[] where sumPF[i] stores the sum of prime divisors of i which can be easily calculated using the approach used in this article. Now, initialise a variable count = 0 and run a loop from 2 to N – 1 and for every element i if sumPF[i] = K then increment the count.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <iostream>
using namespace std;
  
#define MAX 1000001
  
// Function to return the count of numbers
// below N whose sum of prime factors is K
int countNum(int N, int K)
{
    // To store the sum of prime factors
    // for all the numbers
    int sumPF[MAX] = { 0 };
  
    for (int i = 2; i < N; i++) {
  
        // If i is prime
        if (sumPF[i] == 0) {
  
            // Add i to all the numbers
            // which are divisible by i
            for (int j = i; j < N; j += i) {
                sumPF[j] += i;
            }
        }
    }
  
    // To store the count of required numbers
    int count = 0;
    for (int i = 2; i < N; i++) {
        if (sumPF[i] == K)
            count++;
    }
  
    // Return the required count
    return count;
}
  
// Driver code
int main()
{
    int N = 20, K = 7;
  
    cout << countNum(N, K);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG 
{
static int MAX = 1000001;
  
// Function to return the count of numbers
// below N whose sum of prime factors is K
static int countNum(int N, int K)
{
    // To store the sum of prime factors
    // for all the numbers
    int []sumPF = new int[MAX];
  
    for (int i = 2; i < N; i++) 
    {
  
        // If i is prime
        if (sumPF[i] == 0
        {
  
            // Add i to all the numbers
            // which are divisible by i
            for (int j = i; j < N; j += i) 
            {
                sumPF[j] += i;
            }
        }
    }
  
    // To store the count of required numbers
    int count = 0;
    for (int i = 2; i < N; i++)
    {
        if (sumPF[i] == K)
            count++;
    }
  
    // Return the required count
    return count;
}
  
// Driver code
public static void main(String[] args) 
{
    int N = 20, K = 7;
  
    System.out.println(countNum(N, K));
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
MAX = 1000001
  
# Function to return the count of numbers 
# below N whose sum of prime factors is K 
def countNum(N, K) : 
  
    # To store the sum of prime factors 
    # for all the numbers 
    sumPF = [0] * MAX
  
    for i in range(2, N) :
          
        # If i is prime 
        if (sumPF[i] == 0) : 
  
            # Add i to all the numbers 
            # which are divisible by i 
            for j in range(i, N, i) :
                sumPF[j] += i; 
  
    # To store the count of required numbers 
    count = 0
    for i in range(2, N) :
        if (sumPF[i] == K) :
            count += 1
  
    # Return the required count 
    return count; 
  
# Driver code 
if __name__ == "__main__"
  
    N = 20; K = 7;
      
    print(countNum(N, K)); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
      
class GFG 
{
static int MAX = 1000001;
  
// Function to return the count of numbers
// below N whose sum of prime factors is K
static int countNum(int N, int K)
{
    // To store the sum of prime factors
    // for all the numbers
    int []sumPF = new int[MAX];
  
    for (int i = 2; i < N; i++) 
    {
  
        // If i is prime
        if (sumPF[i] == 0) 
        {
  
            // Add i to all the numbers
            // which are divisible by i
            for (int j = i; j < N; j += i) 
            {
                sumPF[j] += i;
            }
        }
    }
  
    // To store the count of required numbers
    int count = 0;
    for (int i = 2; i < N; i++)
    {
        if (sumPF[i] == K)
            count++;
    }
  
    // Return the required count
    return count;
}
  
// Driver code
public static void Main(String[] args) 
{
    int N = 20, K = 7;
  
    Console.WriteLine(countNum(N, K));
}
}
  
// This code is contributed by 29AjayKumar

chevron_right


Output:

2


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.