Given a number N. The task is to find the sum of all the prime divisors of N.
Examples:
Input: 60 Output: 10 2, 3, 5 are prime divisors of 60 Input: 39 Output: 16 3, 13 are prime divisors of 39
A naive approach will be to iterate for all numbers till N and check if the number divides N. If the number divides N, check if that number is prime or not. Add all the prime numbers till N which divides N.
Below is the implementation of the above approach:
C++
// CPP program to find sum of // prime divisors of N #include <bits/stdc++.h> using namespace std; #define N 1000005 // Function to check if the // number is prime or not. bool isPrime( int n) { // Corner cases if (n <= 1) return false ; if (n <= 3) return true ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return false ; for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false ; return true ; } // function to find sum of prime // divisors of N int SumOfPrimeDivisors( int n) { int sum = 0; for ( int i = 1; i <= n; i++) { if (n % i == 0) { if (isPrime(i)) sum += i; } } return sum; } // Driver code int main() { int n = 60; cout << "Sum of prime divisors of 60 is " << SumOfPrimeDivisors(n) << endl; } |
Java
// Java program to find sum // of prime divisors of N import java.io.*; import java.util.*; class GFG { // Function to check if the // number is prime or not. static boolean isPrime( int n) { // Corner cases if (n <= 1 ) return false ; if (n <= 3 ) return true ; // This is checked so that // we can skip middle five // numbers in below loop if (n % 2 == 0 || n % 3 == 0 ) return false ; for ( int i = 5 ; i * i <= n; i = i + 6 ) if (n % i == 0 || n % (i + 2 ) == 0 ) return false ; return true ; } // function to find // sum of prime // divisors of N static int SumOfPrimeDivisors( int n) { int sum = 0 ; for ( int i = 1 ; i <= n; i++) { if (n % i == 0 ) { if (isPrime(i)) sum += i; } } return sum; } // Driver code public static void main(String args[]) { int n = 60 ; System.out.print( "Sum of prime divisors of 60 is " + SumOfPrimeDivisors(n) + "\n" ); } } |
C#
// C# program to find sum // of prime divisors of N using System; class GFG { // Function to check if the // number is prime or not. static bool isPrime( int n) { // Corner cases if (n <= 1) return false ; if (n <= 3) return true ; // This is checked so that // we can skip middle five // numbers in below loop if (n % 2 == 0 || n % 3 == 0) return false ; for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return false ; return true ; } // function to find // sum of prime // divisors of N static int SumOfPrimeDivisors( int n) { int sum = 0; for ( int i = 1; i <= n; i++) { if (n % i == 0) { if (isPrime(i)) sum += i; } } return sum; } // Driver code public static void Main() { int n = 60; Console.WriteLine( "Sum of prime divisors of 60 is " + SumOfPrimeDivisors(n) + "\n" ); } } // This code is contributed // by inder_verma. |
Python 3
# Python 3 program to find # sum of prime divisors of N N = 1000005 # Function to check if the # number is prime or not. def isPrime(n): # Corner cases if n < = 1 : return False if n < = 3 : return True # This is checked so that # we can skip middle five # numbers in below loop if n % 2 = = 0 or n % 3 = = 0 : return False i = 5 while i * i < = n: if (n % i = = 0 or n % (i + 2 ) = = 0 ): return False i = i + 6 return True # function to find sum # of prime divisors of N def SumOfPrimeDivisors(n): sum = 0 for i in range ( 1 , n + 1 ) : if n % i = = 0 : if isPrime(i): sum + = i return sum # Driver code n = 60 print ( "Sum of prime divisors of 60 is " + str (SumOfPrimeDivisors(n))) # This code is contributed # by ChitraNayal |
PHP
<?php // PHP program to find sum // of prime divisors of N $N = 1000005; // Function to check if the // number is prime or not. function isPrime( $n ) { global $N ; // Corner cases if ( $n <= 1) return false; if ( $n <= 3) return true; // This is checked so that // we can skip middle five // numbers in below loop if ( $n % 2 == 0 || $n % 3 == 0) return false; for ( $i = 5; $i * $i <= $n ; $i = $i + 6) if ( $n % $i == 0 || $n % ( $i + 2) == 0) return false; return true; } // function to find sum // of prime divisors of N function SumOfPrimeDivisors( $n ) { $sum = 0; for ( $i = 1; $i <= $n ; $i ++) { if ( $n % $i == 0) { if (isPrime( $i )) $sum += $i ; } } return $sum ; } // Driver code $n = 60; echo "Sum of prime divisors of 60 is " . SumOfPrimeDivisors( $n ); // This code is contributed // by ChitraNayal ?> |
Sum of prime divisors of 60 is 10
Time Complexity: O(N * sqrt(N))
Efficient Approach : The complexity can be reduced using Sieve of Eratosthenes with some modifications. The modifications are as follows:
- Take an array of size N and substitute zero in all the indexes(initially consider all the numbers are prime).
- Iterate for all the numbers whose indexes have zero(i.e., it is prime numbers).
- Add this number to all it’s multiples less than N
- Return the array[N] value which has the sum stored in it.
Below is the implementation of the above approach.
C++
// CPP program to find prime divisors of // all numbers from 1 to n #include <bits/stdc++.h> using namespace std; // function to find prime divisors of // all numbers from 1 to n int Sum( int N) { int SumOfPrimeDivisors[N+1] = { 0 }; for ( int i = 2; i <= N; ++i) { // if the number is prime if (!SumOfPrimeDivisors[i]) { // add this prime to all it's multiples for ( int j = i; j <= N; j += i) { SumOfPrimeDivisors[j] += i; } } } return SumOfPrimeDivisors[N]; } // Driver code int main() { int N = 60; cout << "Sum of prime divisors of 60 is " << Sum(N) << endl; } |
Java
// Java program to find // prime divisors of // all numbers from 1 to n import java.io.*; import java.util.*; class GFG { // function to find prime // divisors of all numbers // from 1 to n static int Sum( int N) { int SumOfPrimeDivisors[] = new int [N + 1 ]; for ( int i = 2 ; i <= N; ++i) { // if the number is prime if (SumOfPrimeDivisors[i] == 0 ) { // add this prime to // all it's multiples for ( int j = i; j <= N; j += i) { SumOfPrimeDivisors[j] += i; } } } return SumOfPrimeDivisors[N]; } // Driver code public static void main(String args[]) { int N = 60 ; System.out.print( "Sum of prime " + "divisors of 60 is " + Sum(N) + "\n" ); } } |
Python3
# Python 3 program to find # prime divisors of # all numbers from 1 to n # function to find prime # divisors of all numbers # from 1 to n def Sum (N): SumOfPrimeDivisors = [ 0 ] * (N + 1 ) for i in range ( 2 , N + 1 ) : # if the number is prime if (SumOfPrimeDivisors[i] = = 0 ) : # add this prime to # all it's multiples for j in range (i, N + 1 , i) : SumOfPrimeDivisors[j] + = i return SumOfPrimeDivisors[N] # Driver code N = 60 print ( "Sum of prime" , "divisors of 60 is" , Sum (N)); # This code is contributed # by Smitha |
C#
// C# program to find // prime divisors of // all numbers from 1 to n using System; class GFG { // function to find prime // divisors of all numbers // from 1 to n static int Sum( int N) { int []SumOfPrimeDivisors = new int [N + 1]; for ( int i = 2; i <= N; ++i) { // if the number is prime if (SumOfPrimeDivisors[i] == 0) { // add this prime to // all it's multiples for ( int j = i; j <= N; j += i) { SumOfPrimeDivisors[j] += i; } } } return SumOfPrimeDivisors[N]; } // Driver code public static void Main() { int N = 60; Console.Write( "Sum of prime " + "divisors of 60 is " + Sum(N) + "\n" ); } } // This code is contributed // by Smitha |
PHP
<?php // PHP program to find prime // divisors of all numbers // from 1 to n // function to find prime // divisors of all numbers // from 1 to n function Sum( $N ) { for ( $i = 0; $i <= $N ; $i ++) $SumOfPrimeDivisors [ $i ] = 0; for ( $i = 2; $i <= $N ; ++ $i ) { // if the number is prime if (! $SumOfPrimeDivisors [ $i ]) { // add this prime to // all it's multiples for ( $j = $i ; $j <= $N ; $j += $i ) { $SumOfPrimeDivisors [ $j ] += $i ; } } } return $SumOfPrimeDivisors [ $N ]; } // Driver code $N = 60; echo "Sum of prime divisors of 60 is " . Sum( $N ); // This code is contributed by Mahadev99 ?> |
Sum of prime divisors of 60 is 10
Time Complexity: O(N * log N)
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.