Related Articles
Sum of all the prime divisors of a number
• Difficulty Level : Medium
• Last Updated : 17 Jan, 2019

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ` `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

 ` `

Output:

```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 ` `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

 ` `

Output:

```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.

My Personal Notes arrow_drop_up
Recommended Articles
Page :