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 = 17Input: 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++ 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 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. |
# 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# 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 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. |
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)