I am implementing A064604 - OEIS for positive integers up to 10 billion.
I am finding the divisors in \$O(sqrt(N))\$\$O(\sqrt N)\$. So, the overall time complexity of running the formula right now is \$O(N*sqrt(N))\$\$O(N\sqrt N)\$. How do I improve on this?
import math
def factors(n):
return set(reduce(list.__add__,
([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))
def sigma_4(n):
l = factors(n)
ans=0
for factor in l:
ans += (pow(factor,4))
return ans
n=int(raw_input())
ans=0
for i in xrange(1,n+1):
ans+=sigma_4(i)
print ans