refactor method
This commit is contained in:
parent
d3701a5b61
commit
5309593e70
|
@ -132,6 +132,22 @@
|
|||
"metadata": {},
|
||||
"outputs": [],
|
||||
"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",
|
||||
" dsum = [1 for n in range(0, limit)]\n",
|
||||
" dsum[0] = 0\n",
|
||||
|
@ -144,21 +160,7 @@
|
|||
"\n",
|
||||
" # n is prime\n",
|
||||
" dsum[n] = n + 1\n",
|
||||
"\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",
|
||||
" update_multiples(dsum, n, limit)\n",
|
||||
" yield dsum[n]"
|
||||
]
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue