# Python Program for Find sum of odd factors of a number

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

Examples:

Input : n = 30 Output : 24 Odd dividers sum 1 + 3 + 5 + 15 = 24 Input : 18 Output : 13 Odd dividers sum 1 + 3 + 9 = 13

Let p_{1}, p_{2}, … p_{k} be prime factors of n. Let a_{1}, a_{2}, .. a_{k} be highest powers of p_{1}, p_{2}, .. p_{k} respectively that divide n, i.e., we can write n as **n = (p _{1}^{a1})*(p_{2}^{a2})* … (p_{k}^{ak})**.

Sum of divisors = (1 + p_{1}+ p_{1}^{2}... p_{1}^{a1}) * (1 + p_{2}+ p_{2}^{2}... p_{2}^{a2}) * ............................................. (1 + p_{k}+ p_{k}^{2}... p_{k}^{ak})

To find sum of odd factors, we simply need to ignore even factors and their powers. For example, consider n = 18. It can be written as 2^{1}3^{2} and sun of all factors is (1)*(1 + 2)*(1 + 3 + 3^{2}). Sum of odd factors (1)*(1+3+3^{2}) = 13.

To remove all even factors, we repeatedly divide n while it is divisible by 2. After this step, we only get odd factors. Note that 2 is the only even prime.

## Python3

`# Formula based Python3 program ` `# to find sum of all divisors` `# of n.` `import` `math` ` ` `# Returns sum of all factors` `# of n.` `def` `sumofoddFactors( n ):` ` ` ` ` `# Traversing through all ` ` ` `# prime factors.` ` ` `res ` `=` `1` ` ` ` ` `# ignore even factors by ` ` ` `# of 2` ` ` `while` `n ` `%` `2` `=` `=` `0` `:` ` ` `n ` `=` `n ` `/` `/` `2` ` ` ` ` `for` `i ` `in` `range` `(` `3` `, ` `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` `+` `=` `1` ` ` ` ` `n ` `=` `n ` `/` `/` `i` ` ` `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 ` `=` `30` `print` `(sumofoddFactors(n))` ` ` `# This code is contributed by "Sharad_Bhardwaj".` |

Output:

24

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