refactor method
This commit is contained in:
parent
d3701a5b61
commit
5309593e70
|
@ -132,6 +132,22 @@
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
|
"def update_multiples(dsum, p, limit):\n",
|
||||||
|
" q = p\n",
|
||||||
|
" while True:\n",
|
||||||
|
" # sigma(a*b) = sigma(a) * sigma(b) if gcd(a, b) = 1\n",
|
||||||
|
" for k in range(2 * q, limit, q):\n",
|
||||||
|
" if k % (p*q) != 0:\n",
|
||||||
|
" dsum[k] *= dsum[q]\n",
|
||||||
|
"\n",
|
||||||
|
" if p * q >= limit:\n",
|
||||||
|
" break\n",
|
||||||
|
"\n",
|
||||||
|
" # sigma(p^k) = p^k + sigma(p^(k-1))\n",
|
||||||
|
" dsum[p*q] = p * q + dsum[q]\n",
|
||||||
|
" q *= p\n",
|
||||||
|
" \n",
|
||||||
|
"\n",
|
||||||
"def sum_of_divisors_range(limit): \n",
|
"def sum_of_divisors_range(limit): \n",
|
||||||
" dsum = [1 for n in range(0, limit)]\n",
|
" dsum = [1 for n in range(0, limit)]\n",
|
||||||
" dsum[0] = 0\n",
|
" dsum[0] = 0\n",
|
||||||
|
@ -144,21 +160,7 @@
|
||||||
"\n",
|
"\n",
|
||||||
" # n is prime\n",
|
" # n is prime\n",
|
||||||
" dsum[n] = n + 1\n",
|
" dsum[n] = n + 1\n",
|
||||||
"\n",
|
" update_multiples(dsum, n, limit)\n",
|
||||||
" m = n\n",
|
|
||||||
" while True:\n",
|
|
||||||
" # sigma(a*b) = sigma(a) * sigma(b) if gcd(a, b) = 1\n",
|
|
||||||
" for k in range(2 * m, limit, m):\n",
|
|
||||||
" if k % (m*n) != 0:\n",
|
|
||||||
" dsum[k] *= dsum[m]\n",
|
|
||||||
"\n",
|
|
||||||
" if m * n >= limit:\n",
|
|
||||||
" break\n",
|
|
||||||
" \n",
|
|
||||||
" # sigma(p^k) = p^k + sigma(p^(k-1))\n",
|
|
||||||
" dsum[m*n] = m*n + dsum[m]\n",
|
|
||||||
" m *= n\n",
|
|
||||||
" \n",
|
|
||||||
" yield dsum[n]"
|
" yield dsum[n]"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue