# the summation of all proper divisors of a number

## Question:

Problem is from online judge site. I have no idea how my code fails in the tests. I tried possible edge cases but https://www.spoj.com/problems/DIVSUM/, website still gave me error, At first try i went on brute force and loop throught 1 to input number, but efficiency was poor then i search how to develop better solution and found a really good solution to decrase complexity to sqrt(n).
Given a natural number n (1 <= n <= 500000), please output the summation of all its proper divisors.

Definition: A proper divisor of a natural number is the divisor that is strictly less than the number.

e.g. number 20 has 5 proper divisors: 1, 2, 4, 5, 10, and the divisor summation is: 1 + 2 + 4 + 5 + 10 = 22.

``````import math

def divisorSummation(inp):
if(inp == 1):
return 0

for i in range(1,  int(math.sqrt((inp)))+1):
if(inp % i == 0):
if(i*i != inp and i != 1):
divisorsSum += inp / i

value = int(input())
for i in range(value):
(divisorSummation(int(input())))
``````

Your code works fine. In fact, I submitted your code (with modifications to include output) and it was accepted. Check https://www.spoj.com/status/ ID 30064357 for proof.

``````import math

def divisorSummation(inp):
if inp == 1:
return 0

for i in range(1, int(math.sqrt(inp)) + 1):
if inp % i == 0: