Find Sum of numbers in given Range when numbers are modified as given

Last Updated : 23 Jul, 2025

Find the sum of all the numbers between the range l and r. Here each number is represented by the sum of its distinct prime factors. 

Examples:

Input:  l = 1, r = 6
Output: 17
Explanation:  For 1, sum of prime factors = 0
For 2, Sum of Prime factors = 2
For 3, Sum of Prime factors = 3
For 4, Sum of Prime factors = 2
For 5, Sum of Prime factors = 5
For 6, Sum of Prime factors = 2 + 3 = 5
So, Total sum of all prime factors for the given range = 2 + 3 + 2 + 5 + 5 = 17 

Input:  l = 11, r = 15
Output: 46
Explanation: For 11, sum of prime factors = 11
For 12, Sum of Prime factors = 2 + 3 = 5
For 13, Sum of Prime factors = 13
For 14, Sum of Prime factors = 2 + 7 = 9
For 15, Sum of Prime factors = 3 + 5 = 8
So, Total sum of all prime factors for the given range = 11 + 5 + 13 + 9 + 8 = 46

Approach: To solve the problem follow the below steps:

  • Create a function to find out all prime factors of a number and sum all prime factors which will represent that number.
  • Sum all the modified numbers in the range [l, r] numbers and return that as the total sum.

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 isPrime(int x)
{
    if (x == 1)
        return false;
    if (x == 2)
        return true;

    for (int i = 2; i * i <= x; i++) {

        // If X has factor that is i,
        // then return not Prime
        if (x % i == 0)
            return false;
    }

    // If we reach here means no factor
    // found so return prime
    return true;
}

// This function is to represent a number
// as a sum of all its prime factors
int SumOfPrimeFactors(int l, int r)
{
    int sum = 0, ans = 0;
    for (int i = l; i <= r; i++) {
        sum = 0;
        for (int j = 1; j * j <= i; j++) {

            // If num has factor i and that
            // also prime
            if (i % j == 0) {
                if (isPrime(j))
                    sum += j;
                if (i / j != j and isPrime(i / j))
                    sum += i / j;
            }
        }
        ans += sum;
    }

    return ans;
}

// Driver Code
int main()
{
    int l = 11, r = 15;

    // Function call
    cout << SumOfPrimeFactors(l, r);

    return 0;
}
Java
// Java code to implement the approach

import java.io.*;

class GFG {

    // Function to check prime
    static boolean isPrime(int x)
    {
        if (x == 1)
            return false;
        if (x == 2)
            return true;

        for (int i = 2; i * i <= x; i++) {

            // If X has factor that is i,
            // then return not Prime
            if (x % i == 0)
                return false;
        }

        // If we reach here means no factor
        // found so return prime
        return true;
    }

    // This function is to represent a number
    // as a sum of all its prime factors
    static int SumOfPrimeFactors(int l, int r)
    {
        int sum = 0, ans = 0;
        for (int i = l; i <= r; i++) {
            sum = 0;
            for (int j = 1; j * j <= i; j++) {
                // If num has factor i and that
                // also prime
                if (i % j == 0) {
                    if (isPrime(j)) {
                        sum += j;
                    }
                    if (i / j != j && isPrime(i / j)) {
                        sum += i / j;
                    }
                }
            }
            ans += sum;
        }

        return ans;
    }

    public static void main(String[] args)
    {
        int l = 11, r = 15;

        // Function call
        System.out.print(SumOfPrimeFactors(l, r));
    }
}

// This code is contributed by lokeshmvs21.
Python3
# python code to implement the approach

import math
# Function to check prime
def isPrime(x):
    if (x == 1):
        return False
    if (x == 2):
        return True
    
    for i in range(2,int(math.sqrt(x))+1):
        # If X has factor that is i,
        # then return not Prime
        if (x % i == 0):
            return False
    
    # If we reach here means no factor
    # found so return prime
    return True

# This function is to represent a number
# as a sum of all its prime factors
def SumOfPrimeFactors(l,r):
    sumvar = 0
    ans = 0
    #for ( i = l i <= r i++) 
    for i in range(l,r+1):
        sumvar = 0
        # for (int j = 1; j * j <= i; j++) {
        for j in range(1,int(math.sqrt(i))+1):
          
            # If num has factor i and that
            # also prime
            if (i % j == 0):
                if (isPrime(j)):
                    sumvar += j
                if (int(i / j) != j and isPrime(int(i / j))):
                    sumvar += math.floor(i / j)
                    
        ans += sumvar
    return ans


l = 11
r = 15

# Function call
print(SumOfPrimeFactors(l, r))

# This code is contributed by ksam24000
C#
// C# implementation
using System;

public class GFG {

    // Function to check prime
    public static bool isPrime(int x)
    {
        if (x == 1)
            return false;
        if (x == 2)
            return true;

        for (int i = 2; i * i <= x; i++) {

            // If X has factor that is i,
            // then return not Prime
            if (x % i == 0)
                return false;
        }

        // If we reach here means no factor
        // found so return prime
        return true;
    }

    // This function is to represent a number
    // as a sum of all its prime factors
    public static int SumOfPrimeFactors(int l, int r)
    {
        int sum = 0, ans = 0;
        for (int i = l; i <= r; i++) {
            sum = 0;
            for (int j = 1; j * j <= i; j++) {

                // If num has factor i and that
                // also prime
                if (i % j == 0) {
                    if (isPrime(j) == true)
                        sum += j;
                    if ((int)(i / j) != j
                        && isPrime((int)(i / j)))
                        sum += i / j;
                }
            }
            ans += sum;
        }

        return ans;
    }

    static public void Main()
    {
        int l = 11, r = 15;

        // Function call
        Console.WriteLine(SumOfPrimeFactors(l, r));
    }
}
// this code is contributed by ksam24000
JavaScript
// Javascript code to implement the approach

// Function to check prime
function isPrime(x)
{
    if (x == 1)
        return false;
    if (x == 2)
        return true;

    for (let i = 2; i * i <= x; i++) {

        // If X has factor that is i,
        // then return not Prime
        if (x % i == 0)
            return false;
    }

    // If we reach here means no factor
    // found so return prime
    return true;
}

// This function is to represent a number
// as a sum of all its prime factors
function SumOfPrimeFactors(l, r)
{
    let sum = 0, ans = 0;
    for (let i = l; i <= r; i++) {
        sum = 0;
        for (let j = 1; j * j <= i; j++) {

            // If num has factor i and that
            // also prime
            if (i % j == 0) {
                if (isPrime(j))
                    sum += j;
                if (i / j != j && isPrime(i / j))
                    sum += i / j;
            }
        }
        ans += sum;
    }

    return ans;
}

// Driver Code
let l = 11, r = 15;

// Function call
console.log(SumOfPrimeFactors(l, r));

// This code is contributed by Samim Hossain Mondal.

Output
46

Time Complexity: O(N * sqrt(r) * sqrt(r)) where n is the number of elements in the range and it takes maximum sqrt(r) time each to find all the factors and check if the factors are prime.
Auxiliary Space: O(1)

Comment