Sum of largest prime factor of each number less than equal to n
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++
#include <bits/stdc++.h>
using namespace std;
int sumOfLargePrimeFactor( int n)
{
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] == 0)
{
for ( int i=p*2; i<=n; i += p)
prime[i] = p;
}
}
for ( int p=2; p<=n; p++)
{
if (prime[p])
sum += prime[p];
else
sum += p;
}
return sum;
}
int main()
{
int n = 12;
cout << "Sum = "
<< sumOfLargePrimeFactor(n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
static int sumOfLargePrimeFactor( int n)
{
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] == 0 )
{
for ( int i = p * 2 ; i <= n; i += p)
prime[i] = p;
}
}
for ( int p = 2 ; p <= n; p++)
{
if (prime[p] != 0 )
sum += prime[p];
else
sum += p;
}
return sum;
}
public static void main(String args[])
{
int n = 12 ;
System.out.println( "Sum = "
+ sumOfLargePrimeFactor(n));
}
}
|
Python3
def sumOfLargePrimeFactor( n ):
prime = [ 0 ] * (n + 1 )
sum = 0
max = int (n / 2 )
for p in range ( 2 , max + 1 ):
if prime[p] = = 0 :
for i in range (p * 2 , n + 1 , p):
prime[i] = p
for p in range ( 2 , n + 1 ):
if prime[p]:
sum + = prime[p]
else :
sum + = p
return sum
n = 12
print ( "Sum =" , sumOfLargePrimeFactor(n))
|
C#
using System;
class GFG {
static int sumOfLargePrimeFactor( int n)
{
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] == 0)
{
for ( int i = p * 2; i <= n; i += p)
prime[i] = p;
}
}
for ( int p = 2; p <= n; p++)
{
if (prime[p] != 0)
sum += prime[p];
else
sum += p;
}
return sum;
}
public static void Main()
{
int n = 12;
Console.WriteLine( "Sum = " + sumOfLargePrimeFactor(n));
}
}
|
PHP
<?php
function sumOfLargePrimeFactor( $n )
{
$prime = array_fill (0, $n +1,0);
$sum = 0;
$max = (int)( $n / 2);
for ( $p =2; $p <= $max ; $p ++)
{
if ( $prime [ $p ] == 0)
{
for ( $i = $p *2; $i <= $n ; $i += $p )
$prime [ $i ] = $p ;
}
}
for ( $p =2; $p <= $n ; $p ++)
{
if ( $prime [ $p ])
$sum += $prime [ $p ];
else
$sum += $p ;
}
return $sum ;
}
$n = 12;
echo "Sum = " .sumOfLargePrimeFactor( $n );
?>
|
Javascript
<script>
function sumOfLargePrimeFactor(n)
{
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] == 0)
{
for (let i = p * 2; i <= n; i += p)
prime[i] = p;
}
}
for (let p = 2; p <= n; p++)
{
if (prime[p])
sum += prime[p];
else
sum += p;
}
return sum;
}
let n = 12;
document.write( "Sum = " +
sumOfLargePrimeFactor(n));
</script>
|
Output:
Sum = 46
Time Complexity: O(N*log(logN))
Auxiliary Space: O(N)
Last Updated :
13 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...