Given a number n, the task is to find the even factor sum of a number.

Examples:

Input : 30 Output : 48 Even dividers sum 2 + 6 + 10 + 30 = 48 Input : 18 Output : 26 Even dividers sum 2 + 6 + 18 = 26

Let p1, p2, … pk be prime factors of n. Let a1, a2, .. ak be highest powers of p1, p2, .. pk respectively that divide n, i.e., we can write n as **n = (p1 ^{a1})*(p2^{a2})* … (pk^{ak})**.

Sum of divisors = (1 + p1 + p1^{2}... p1^{a1}) * (1 + p2 + p2^{2}... p2^{a2}) * ........................... (1 + pk + pk^{2}... pk^{ak})

If number is odd, then there are no even factors, so we simply return 0.

If number is even, we use above formula. We only need to ignore 2^{0}. All other terms multiply to produce even factor sum. For example, consider n = 18. It can be written as 2^{1}3^{2} and sun of all factors is (2^{0} + 2^{1})*(3^{0} + 3^{1} + 3^{2}). if we remove 2^{0} then we get the

Sum of even factors (2)*(1+3+3^{2}) = 26.

To remove odd number in even factor, we ignore then 2^{0} whaich is 1. After this step, we only get even factors. Note that 2 is the only even prime.

`// Formula based CPP program to find sum of all` `// divisors of n.` `#include <bits/stdc++.h>` `using` `namespace` `std;` ` ` `// Returns sum of all factors of n.` `int` `sumofFactors(` `int` `n)` `{` ` ` `// If n is odd, then there are no even factors.` ` ` `if` `(n % 2 != 0)` ` ` `return` `0;` ` ` ` ` `// Traversing through all prime factors.` ` ` `int` `res = 1;` ` ` `for` `(` `int` `i = 2; i <= ` `sqrt` `(n); i++) {` ` ` ` ` `// While i divides n, print i and divide n` ` ` `int` `count = 0, curr_sum = 1, curr_term = 1;` ` ` `while` `(n % i == 0) {` ` ` `count++;` ` ` ` ` `n = n / i;` ` ` ` ` `// here we remove the 2^0 that is 1. All` ` ` `// other factors` ` ` `if` `(i == 2 && count == 1)` ` ` `curr_sum = 0;` ` ` ` ` `curr_term *= i;` ` ` `curr_sum += curr_term;` ` ` `}` ` ` ` ` `res *= curr_sum;` ` ` `}` ` ` ` ` `// This condition is to handle the case when n` ` ` `// is a prime number.` ` ` `if` `(n >= 2)` ` ` `res *= (1 + n);` ` ` ` ` `return` `res;` `}` ` ` `// Driver code` `int` `main()` `{` ` ` `int` `n = 18;` ` ` `cout << sumofFactors(n);` ` ` `return` `0;` `}` |

**Output:**

26

Please refer complete article on Find sum of even factors of a number for more details!

**C++ Foundation Course**for Basic to Advanced C++ and

**C++ STL Course**for foundation plus STL.