Skip to content
Related Articles
Open in App
Not now

Related Articles

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

Improve Article
Save Article
  • Last Updated : 02 Dec, 2022
Improve Article
Save Article

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)


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!