# Find sum of even factors of a number

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

Prerequisite : Sum of factors

As discussed in above mentioned previous post, sum of factors of a number is

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.

Below is the implementation of the above approach.

## C++

// 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; }

## Java

// Formula based Java program to // find sum of all divisors of n. import java.util.*; import java.lang.*; public class GfG{ // Returns sum of all factors of n. public static 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 <= Math.sqrt(n); i++) { int count = 0, curr_sum = 1; int curr_term = 1; // While i divides n, print i and // divide n 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 function public static void main(String argc[]){ int n = 18; System.out.println(sumofFactors(n)); } } /* This code is contributed by Sagar Shukla */

## Python3

# Formula based Python3 # program to find sum # of alldivisors of n. import math # Returns sum of all # factors of n. def sumofFactors(n) : # If n is odd, then # there are no even # factors. if (n % 2 != 0) : return 0 # Traversing through # all prime factors. res = 1 for i in range(2, (int)(math.sqrt(n)) + 1) : # While i divides n # print i and divide n count = 0 curr_sum = 1 curr_term = 1 while (n % i == 0) : count= count + 1 n = n // i # here we remove the # 2^0 that is 1. All # other factors if (i == 2 and count == 1) : curr_sum = 0 curr_term = curr_term * i curr_sum = curr_sum + curr_term res = res * curr_sum # This condition is to # handle the case when # n is a prime number. if (n >= 2) : res = res * (1 + n) return res # Driver code n = 18 print(sumofFactors(n)) # This code is contributed by Nikita Tiwari.

## C#

// Formula based C# program to // find sum of all divisors of n. using System; public class GfG { // Returns sum of all factors of n. public static 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 <= Math.Sqrt(n); i++) { int count = 0, curr_sum = 1; int curr_term = 1; // While i divides n, print i // and divide n 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 public static void Main() { int n = 18; Console.WriteLine(sumofFactors(n)); } } // This code is contributed by vt_m

## PHP

<?php // Formula based php program to find sum // of all divisors of n. // Returns sum of all factors of n. function sumofFactors($n) { // If n is odd, then there are no // even factors. if ($n % 2 != 0) return 0; // Traversing through all prime factors. $res = 1; for ($i = 2; $i <= sqrt($n); $i++) { // While i divides n, print i // and divide n $count = 0; $curr_sum = 1; $curr_term = 1; while ($n % $i == 0) { $count++; $n = floor($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 $n = 18; echo sumofFactors($n); // This code is contributed by mits ?>

## Javascript

<script> // javascript program to // find sum of all divisors of n. // Returns sum of all factors of n. function sumofFactors(n) { // If n is odd, then there // are no even factors. if (n % 2 != 0) return 0; // Traversing through all prime // factors. let res = 1; for (let i = 2; i <= Math.sqrt(n); i++) { let count = 0, curr_sum = 1; let curr_term = 1; // While i divides n, print i and // divide n 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 Function let n = 18; document.write(sumofFactors(n)); // This code is contributed by susmitakundugoaldanga. </script>

Output:

26