Given a non-negative integer n. The problem is to find the sum of the largest prime factor of each number less than equal to n.
Examples:
Input : n = 10 Output : 32 Largest prime factor of each number Prime factor of 2 = 2 Prime factor of 3 = 3 Prime factor of 4 = 2 Prime factor of 5 = 5 Prime factor of 6 = 3 Prime factor of 7 = 7 Prime factor of 8 = 2 Prime factor of 9 = 3 Prime factor of 10 = 5 Sum = (2+3+2+5+3+7+2+3+5) = 32 Input : n = 12 Output : 46
Algorithm:
sumOfLargePrimeFactor(n) Declare prime[n+1] and initialize all value to 0 Initialize sum = 0 max = n / 2 for p = 2 to max if prime[p] == 0 then i = p*2 while i <= n prime[i] = p i = i + p for p = 2 to n if prime[p] then sum = sum + prime[p] else sum = sum + p return sum
C++
// C++ implementation to find sum of largest prime factor // of each number less than equal to n #include <bits/stdc++.h> using namespace std;
// function to find sum of largest prime factor // of each number less than equal to n int sumOfLargePrimeFactor( int n)
{ // Create an integer array "prime[0..n]" and initialize
// all entries of it as 0. A value in prime[i] will
// finally be 0 if 'i' is a prime, else it will
// contain the largest prime factor of 'i'.
int prime[n+1], sum = 0;
memset (prime, 0, sizeof (prime));
int max = n / 2;
for ( int p=2; p<=max; p++)
{
// If prime[p] is '0', then it is a
// prime number
if (prime[p] == 0)
{
// Update all multiples of p
for ( int i=p*2; i<=n; i += p)
prime[i] = p;
}
}
// Sum up the largest prime factor of all
// the numbers
for ( int p=2; p<=n; p++)
{
// if 'p' is a non- prime number then
// prime[p] gives its largest prime
// factor
if (prime[p])
sum += prime[p];
// 'p' is a prime number
else
sum += p;
}
// required sum
return sum;
} // Driver program to test above int main()
{ int n = 12;
cout << "Sum = "
<< sumOfLargePrimeFactor(n);
return 0;
} |
Java
// Java implementation to find sum // of largest prime factor of each // number less than equal to n import java.io.*;
import java.util.*;
class GFG {
// function to find sum of largest
// prime factorof each number
// less than equal to n
static int sumOfLargePrimeFactor( int n)
{
// Create an integer array "prime[0..n]"
// and initialize all entries of it as 0.
// A value in prime[i] will finally be 0
// if 'i' is a prime, else it will contain
// the largest prime factor of 'i'.
int prime[] = new int [n + 1 ], sum = 0 ;
Arrays.fill(prime, 0 );
int max = n / 2 ;
for ( int p = 2 ; p <= max; p++)
{
// If prime[p] is '0', then it is a
// prime number
if (prime[p] == 0 )
{
// Update all multiples of p
for ( int i = p * 2 ; i <= n; i += p)
prime[i] = p;
}
}
// Sum up the largest prime factor of all
// the numbers
for ( int p = 2 ; p <= n; p++)
{
// if 'p' is a non- prime number then
// prime[p] gives its largest prime
// factor
if (prime[p] != 0 )
sum += prime[p];
// 'p' is a prime number
else
sum += p;
}
// required sum
return sum;
}
// Driver program
public static void main(String args[])
{
int n = 12 ;
System.out.println( "Sum = "
+ sumOfLargePrimeFactor(n));
}
} // This code is contributed // by Nikita Tiwari. |
Python3
# Python3 code implementation to find # sum of largest prime factor of # each number less than equal to n # function to find sum of largest # prime factor of each number less # than equal to n def sumOfLargePrimeFactor( n ):
# Create an integer array "prime[0..n]"
# and initialize all entries of it
# as 0. A value in prime[i] will
# finally be 0 if 'i' is a prime,
# else it will contain the largest
# prime factor of 'i'.
prime = [ 0 ] * (n + 1 )
sum = 0
max = int (n / 2 )
for p in range ( 2 , max + 1 ):
# If prime[p] is '0', then
# it is a prime number
if prime[p] = = 0 :
# Update all multiples of p
for i in range (p * 2 , n + 1 , p):
prime[i] = p
# Sum up the largest prime factor
# of all the numbers
for p in range ( 2 , n + 1 ):
# if 'p' is a non- prime
# number then prime[p] gives
# its largest prime factor
if prime[p]:
sum + = prime[p]
# 'p' is a prime number
else :
sum + = p
# required sum
return sum
# Driver code to test above function n = 12
print ( "Sum =" , sumOfLargePrimeFactor(n))
# This code is contributed by "Sharad_Bhardwaj". |
C#
// C# implementation to find sum // of largest prime factor of each // number less than equal to n using System;
class GFG {
// function to find sum of largest
// prime factorof each number
// less than equal to n
static int sumOfLargePrimeFactor( int n)
{
// Create an integer array "prime[0..n]"
// and initialize all entries of it as 0.
// A value in prime[i] will finally be 0
// if 'i' is a prime, else it will contain
// the largest prime factor of 'i'.
int [] prime = new int [n + 1];
int sum = 0;
for ( int i = 1; i < n + 1; i++)
prime[i] = 0;
int max = n / 2;
for ( int p = 2; p <= max; p++)
{
// If prime[p] is '0', then it is a
// prime number
if (prime[p] == 0)
{
// Update all multiples of p
for ( int i = p * 2; i <= n; i += p)
prime[i] = p;
}
}
// Sum up the largest prime factor of all
// the numbers
for ( int p = 2; p <= n; p++)
{
// if 'p' is a non- prime number then
// prime[p] gives its largest prime
// factor
if (prime[p] != 0)
sum += prime[p];
// 'p' is a prime number
else
sum += p;
}
// required sum
return sum;
}
// Driver program
public static void Main()
{
int n = 12;
Console.WriteLine( "Sum = " + sumOfLargePrimeFactor(n));
}
} // This code is contributed by Sam007 |
PHP
<?php // PHP implementation to find sum of largest prime factor // of each number less than equal to n // function to find sum of largest prime factor // of each number less than equal to n function sumOfLargePrimeFactor( $n )
{ // Create an integer array "prime[0..n]" and initialize
// all entries of it as 0. A value in prime[i] will
// finally be 0 if 'i' is a prime, else it will
// contain the largest prime factor of 'i'.
$prime = array_fill (0, $n +1,0);
$sum = 0;
$max = (int)( $n / 2);
for ( $p =2; $p <= $max ; $p ++)
{
// If prime[p] is '0', then it is a
// prime number
if ( $prime [ $p ] == 0)
{
// Update all multiples of p
for ( $i = $p *2; $i <= $n ; $i += $p )
$prime [ $i ] = $p ;
}
}
// Sum up the largest prime factor of all
// the numbers
for ( $p =2; $p <= $n ; $p ++)
{
// if 'p' is a non- prime number then
// prime[p] gives its largest prime
// factor
if ( $prime [ $p ])
$sum += $prime [ $p ];
// 'p' is a prime number
else
$sum += $p ;
}
// required sum
return $sum ;
} // Driver program to test above $n = 12;
echo "Sum = " .sumOfLargePrimeFactor( $n );
// This code is contributed by mits. ?> |
Javascript
<script> // Javascript implementation to find sum // of largest prime factor of each // number less than equal to n // function to find sum of largest prime factor // of each number less than equal to n function sumOfLargePrimeFactor(n)
{ // Create an integer array "prime[0..n]"
// and initialize all entries of it as
// 0. A value in prime[i] will finally
// be 0 if 'i' is a prime, else it will
// contain the largest prime factor of 'i'.
let prime = new Array(n + 1);
let sum = 0;
let max = n / 2;
for (let i = 0; i < n + 1; i++)
prime[i] = 0;
for (let p = 2; p <= max; p++)
{
// If prime[p] is '0', then it is a
// prime number
if (prime[p] == 0)
{
// Update all multiples of p
for (let i = p * 2; i <= n; i += p)
prime[i] = p;
}
}
// Sum up the largest prime factor of all
// the numbers
for (let p = 2; p <= n; p++)
{
// If 'p' is a non- prime number then
// prime[p] gives its largest prime
// factor
if (prime[p])
sum += prime[p];
// 'p' is a prime number
else
sum += p;
}
// Required sum
return sum;
} // Driver code let n = 12; document.write( "Sum = " +
sumOfLargePrimeFactor(n));
// This code is contributed by mohit kumar 29 </script> |
Output:
Sum = 46
Time Complexity: O(N*log(logN))
Auxiliary Space: O(N)